Java 字节流&字符流

两者的区别

Java字节流对应的类为 InputStreamOutputStream ,操作时以字节 (byte) 为单位。

由于Java的编码方式为 Unicode ,中文对应的是两个字节,因此在使用字节流操作时若操作不当,会出现乱码的情况。于是字符流出现了。Java子节流对应的类为 ReaderWriter,操作时以字符 (char) 为单位。

InputStream 与 OutputStream

InputStream 与 OutputStream 在使用文件操作时使用的是他们的子类: FileInputStreamFileOutputStream .
接下来简单介绍一下他们的子类的构造方法

FileInputStream(String name);
FileInputStream(File file);

FileOutputStream的构造方法同上,另外,FileOutputStream所关联的文件若已经存在,则该文件的内容会被清空,所以若不想这样,就调用如下构造方法:

FileOutputStream(String name,boolean append); //第二个参数改为true即可
FileOutputStream(File file,boolean append);

Reader 与 Writer

文件操作对应类: FileReaderFileWriter
构造方法同上

使用字节流 读取 / 写入文件

import java.io.*;
public class testFileStream {
	public static void main(String[] args) throws IOException{
		int n = -1;
		byte[] a = new byte[100];
		File file = new File("C:\\Users\\DELL\\eclipse-workspace\\Test\\src\\JavaIO\\testFileStream.java");
		FileInputStream fin = new FileInputStream(file);
		while((n=fin.read(a,0,100))!=-1) {
			String s= new String(a,0,n);
			System.out.println(s);
		}
		fin.close();
	}
}
  • 文件读取可能失败,记得抛出异常
  • 操作完毕后记得关闭流
import java.io.*;
public class testFileStream1 {
	public static void main(String[] args) {
		byte[] a = "测试".getBytes();
		byte[] b = "FileOUtputStream写入".getBytes();
		try {
			FileOutputStream fout = new FileOutputStream("test.txt");
			fout.write(a);
			fout.write(b,0,b.length);
			fout.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

使用字符流 读取/写入 文件

import java.io.*;
public class testFileReader {
	public static void main(String[] args) throws IOException {
		FileReader fread = new FileReader("test.txt");
		int n = -1;
		char[] a = new char[100];
		while((n=fread.read(a, 0, 100))!=-1) {
			String content = new String(a,0,n);
			System.out.println(content);
		}
		fread.close();
	}
}
  • 注:在这里我们打开了上面FileOutputStream生成的文件。
import java.io.*;
public class testFileWriter {
	public static void main(String[] args) throws IOException{
		FileWriter fwriter = new FileWriter("test.txt",true);
		char[] a = "更改test.txt里面的内容".toCharArray();
		fwriter.write(a);
		fwriter.close();
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_43894577/article/details/89428910