【前提】
在文件流中,不同的流对应不同的缓冲区reader和writer才能读出文件
文件的导入方法
1、直接声明文件
File file1 = new File("te.csv");
2、声明文件输入流,选择文件,参数也可以是File
类型的文件
FileInputStream file2 = new FileInputStream("te.csv");
文件内容读取方法
只要reader,就都不能直接把file作为参数,必须先将其作为输入流的成分,才能再read
1、声明输入流reader对象
这个输入流reader实例化时其参数也要为输入流InputStream
对象
FileInputStream file2 = new FileInputStream("te.csv");
InputStreamReader reader = new InputStreamReader(file2,"UTF-8");
这里的FileInputStream
类是继承自InputStream
类的孩子,所以都是输入流对象可以作为参数。
输入流对象的好处是可以在read时选择编码方式。因此下一个缓冲区reader参数即使是换了个对象,仍然要以输入流对象作为参数。
2、声明缓冲区reader对象
这和上面的输入流类似,只是多了一步,把InputStreamReader
转化为BufferedReader
对象,只有括号里面的reader也是读取,但二者调用的函数就不一样了。
FileInputStream file1 = new FileInputStream("te.csv");
BufferedReader reader = new BufferedReader(new InputStreamReader(file1,"GBK"));
参数其实也可以不用InputStreamReader
对象,换成FileReader
对象也可以
但这时就只能写文件名了,不能改变编码格式 !这个在读取txt文件时没大问题,里面是中文也能打印出来,但其他文件就不行了。
即不管怎样BufferedReader
的reader参数表里一定放的也是reader类型 !
File file3 = new File("te.csv");
reader = new BufferedReader(new FileReader(file3));
按行读取方法
1、文件流,接上点1
这里需要声明一个StringBuffer
对象储存读到的内容
StringBuffer sb=new StringBuffer();
while(reader.ready()) {
sb.append((char)reader.read());
}
System.out.println(sb.toString());
2、缓冲区法,接上点2
因为已经声明好了缓冲区reader,读到的内容就是String
类型了
String temp = null;
while ((temp = reader.readLine()) != null) {
System.out.println(temp);
}