我有一个名为 的文本文件foo.txt,其内容如下:
这
是
文本
我如何在 Java 7 中将这个确切的文件打印到屏幕上?
在 Java 7 之前:
 BufferedReader br = new BufferedReader(new FileReader("foo.txt"));
 String line;
 while ((line = br.readLine()) != null) {
   System.out.println(line);
 }
从 Java 7 开始,不需要关闭流,因为它实现了autocloseable
try (BufferedReader br = new BufferedReader(new FileReader("foo.txt"))) {
   String line;
   while ((line = br.readLine()) != null) {
       System.out.println(line);
   }
}
为什么没有人认为值得一提 Scanner?
Scanner input = new Scanner(new File("foo.txt"));
while (input.hasNextLine())
{
   System.out.println(input.nextLine());
}
此处的每个示例都显示了使用 FileReader 的解决方案。如果您不需要关心文件编码,这很方便。如果您使用英语以外的其他语言,则编码非常重要。假设您有包含此文本的文件
Příliš žluťoučký kůň
úpěl ďábelské ódy
该文件使用 windows-1250 格式。如果你使用 FileReader 你会得到这个结果:
P��li� �lu�ou�k� k��
�p�l ��belsk� �dy
因此,在这种情况下,您需要将编码指定为 Cp1250(Windows 东欧),但 FileReader 不允许您这样做。在这种情况下,您应该在 FileInputStream 上使用 InputStreamReader。
例子:
String encoding = "Cp1250";
File file = new File("foo.txt");
if (file.exists()) {
    try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), encoding))) {
        String line = null;
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}
else {
    System.out.println("file doesn't exist");
}
如果您想逐个字符地读取文件字符,请不要使用 BufferedReader。
try (InputStreamReader isr = new InputStreamReader(new FileInputStream(file), encoding)) {
    int data = isr.read();
    while (data != -1) {
        System.out.print((char) data);
        data = isr.read();
    }
} catch (IOException e) {
    e.printStackTrace();
}
对于那些刚接触 Java 并想知道为什么 Jiri 的答案不起作用的人,请确保您按照他所说的去做并处理异常,否则它将无法编译。这是最低要求:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class ReadFile {
    public static void main(String args[]) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader("test.txt"));
        for (String line; (line = br.readLine()) != null;) {
            System.out.print(line);
        }
        br.close()
    }
}
使用 Java 7 的 try-with-resources 可以改进 Jiri 的答案:
try (BufferedReader br = new BufferedReader(new FileReader("foo.txt"))) {
   String line = null;
   while ((line = br.readLine()) != null) {
       System.out.println(line);
   }
}
在您选择的地方添加异常处理,无论是在这个try地方还是在其他地方。