MENU

Java的FileInputStream和FileReader

导语

今天想聊聊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。


文章标题:Java的FileInputStream和FileReader
如果文中内容侵犯了您的权益,请及时与博主取得联系进行删除!
本站文章未经许可禁止转载,本文地址:https://blog.wanvale.com/archives/42/

Last Modified: June 20, 2020
Archives QR Code Tip
QR Code for this page
Tipping QR Code