26

我有一个名为 的文本文件foo.txt,其内容如下:

文本

我如何在 Java 7 中将这个确切的文件打印到屏幕上?

4

5 回答 5

44

在 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);
   }
}
于 2013-03-29T01:33:49.817 回答
19

为什么没有人认为值得一提 Scanner?

Scanner input = new Scanner(new File("foo.txt"));

while (input.hasNextLine())
{
   System.out.println(input.nextLine());
}
于 2016-08-18T19:23:16.863 回答
3

此处的每个示例都显示了使用 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();
}
于 2017-08-16T12:03:23.990 回答
2

对于那些刚接触 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()
    }
}
于 2014-08-30T01:31:34.473 回答
2

使用 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地方还是在其他地方。

于 2015-02-11T09:05:38.437 回答