致访客
感谢各位一年多的陪伴,因内容调整,本站将于近日迁移到新域名并不再更新主要内容。
特此通知。
感谢各位一年多的陪伴,因内容调整,本站将于近日迁移到新域名并不再更新主要内容。
特此通知。
导语
今天想聊聊FileInputStream和FileReader的区别,虽然都能读文件,但是二者之间的区别还是要注意的。
FileInputStream
首先来看一段代码
import java.io.FileInputStream;
import java.io.IOException;
public class TestFIS {
public static void main(String[] args) throws IOException {
FileInputStream fis=new FileInputStream("./myfile.txt");
int ch=0;
while((ch=fis.read())!=-1){ //直至-1读取结束
System.out.print(ch+" ");
}
fis.close();
}
}
读者可以自己尝试运行一下(注:Windows下请自行修改FileInputStream构造函数的参数地址)
不出意外的话,输出的结果是一串数字而不是文件本身的内容。
如果希望输出正确的内容,则需要进行一些改动:
FileInputStream fis=new FileInputStream("./myfile.txt");
byte [] bs=new byte[fis.available()];//数组长度为fis的长度
fis.read(data);
System.out.println(new String(bs));
fis.close();
再次进行运行调试,可以发现此时可以正常输出文件中的内容了。
FileReader
再来看FileReader
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
public class TestFR {
public static void main(String[] args) throws IOException {
FileReader fr=new FileReader("./myfile.txt");
int ch=0;
while((ch=fr.read())!=-1){ //直至-1读取结束
System.out.print((char)ch);//将ch强制类型转换为char类型后输出
}
fr.close();
}
}
进行运行调试,发现直接且正确地输出了文件的内容
结论
FileInputStream并不适合读取文本文件,而是适合读取二进制等非文本文件。读取文本文件请优先使用FileReader进行读取
引申
来看看FileOutputStream和FileWriter
// FileOutputStream
File foutput = new File(file_location_string);
FileOutputStream fos = new FileOutputStream(foutput);
BufferedWriter output = new BufferedWriter(new OutputStreamWriter(fos));
output.write("Something...");
// FileWriter
FileWriter fstream = new FileWriter(file_location_string);
BufferedWriter output = new BufferedWriter(fstream);
output.write("Something...");
同样的,如果需要进行字符类型的写入,应当优先使用FileWriter,而进行原始字节流的写入则应当使用FileOutputStream。