FileInputStream来读取,完全没有问题,他是读取字节形式的,所以读到中文字符的时候,字节流就会出现乱码,所以必去用要字符流来读取,在用FileInputStream读取文件是用他里面read()方法来读取的,是一口气直接全部读完的,就会留下原来文件换行的脚印。
但这里使用的是BufferedReader。BufferedReader来读取是用readLine()来读取的,意思是一行一行的来读取,这样当读到回车符的时候,就先返回给字符串,然后再进行下一行的读取!
代码如下:
package com.nickwong.code;
import java.io.*;
public class ReadTxt {
public static void main(String args[]) {
readFile();
writeFile();
}
/**
* 读入TXT文件
*/
public static void readFile() {
String pathname = "input.txt"; // 绝对路径或相对路径都可以,写入文件时演示相对路径,读取以上路径的input.txt文件
//防止文件建立或读取失败,用catch捕捉错误并打印,也可以throw;
//不关闭文件会导致资源的泄露,读写文件都同理
//Java7的try-with-resources可以优雅关闭文件,异常时自动关闭文件;
try (FileReader reader = new FileReader(pathname);
BufferedReader br = new BufferedReader(reader) // 建立一个对象,它把文件内容转成计算机能读懂的语言
) {
String line;
while ((line = br.readLine()) != null) {
// 一次读入一行数据
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 写入TXT文件
*/
public static void writeFile() {
try {
File writeName = new File("output.txt"); // 相对路径,如果没有则要建立一个新的output.txt文件
writeName.createNewFile(); // 创建新文件,有同名的文件的话直接覆盖
try (FileWriter writer = new FileWriter(writeName);
BufferedWriter out = new BufferedWriter(writer)
) {
out.write("我会写入文件啦1\r\n"); // \r\n即为换行
out.write("我会写入文件啦2\r\n"); // \r\n即为换行
out.flush(); // 把缓存区内容压入文件
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
NB: 1.如果读取的文件是这样的。也就是第二行的位置有个空格。如果想在这里停止,并对上面的内容进行处理的时候,判定是
line.equals(" ");//有个空格
2.如果读取的文件是下面的形式,那么使用下面的语句,就可以得到第二行的位置。但是最后文本的结束还是使用null判定。
line.equals("");// 中间是什么都没有,但是和null是两个含义
3. null 和空的区别
一般情况下 . java中的null就是指的空 . 但是稍微注意的是 空字符串"" 和null是有区别的 "" 代表有字符串, 但是字符串内容为空, 长度为0 null表示对象为空 如果用为null的对象去调用方法, 就会出现空指针异常
参考: