两者的区别
Java字节流对应的类为 InputStream 与 OutputStream ,操作时以字节 (byte) 为单位。
由于Java的编码方式为 Unicode ,中文对应的是两个字节,因此在使用字节流操作时若操作不当,会出现乱码的情况。于是字符流出现了。Java子节流对应的类为 Reader 与 Writer,操作时以字符 (char) 为单位。
InputStream 与 OutputStream
InputStream 与 OutputStream 在使用文件操作时使用的是他们的子类: FileInputStream 与 FileOutputStream .
接下来简单介绍一下他们的子类的构造方法
FileInputStream(String name);
FileInputStream(File file);
FileOutputStream的构造方法同上,另外,FileOutputStream所关联的文件若已经存在,则该文件的内容会被清空,所以若不想这样,就调用如下构造方法:
FileOutputStream(String name,boolean append); //第二个参数改为true即可
FileOutputStream(File file,boolean append);
Reader 与 Writer
文件操作对应类: FileReader 与 FileWriter
构造方法同上
使用字节流 读取 / 写入文件
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();
}
}