【问题标题】:Java: print contents of text file to screenJava:将文本文件的内容打印到屏幕上
【发布时间】:2013-03-29 01:29:26
【问题描述】:

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

这个

文字

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

【问题讨论】:

  • 听起来您需要从文件中读取文本。我可以向你保证,网络上有很多关于从 Java 中读取文件的信息......
  • 我告诉你!我在任何地方都找不到这个!是的,我使用谷歌。
  • 过去的这个问题包含您正在寻找的详细信息:stackoverflow.com/questions/2788080/reading-a-text-file-in-java
  • @user2151887:所以你没有尝试这个? google.co.uk/search?q=java+read+file
  • I'm telling you! I can't find this anywhere! And yes, I use Google。我觉得这很难相信。我见过的任何教科书或一般教程总是有关于文件 I/O 的部分。您是否甚至查看了此页面右侧提供给您的链接?我认为标题为“Readig a Text File in Java”的文章是一个不错的起点。

标签: java text io java-7


【解决方案1】:

在 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);
   }
}

【讨论】:

【解决方案2】:

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

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

while (input.hasNextLine())
{
   System.out.println(input.nextLine());
}

【讨论】:

  • ...因为问题是关于 Java 的,这意味着代码应该过于冗长且难以理解(您问过!)。如果你还没有尝试过 Groovy(Java 语法兼容在 JVM 上运行),我打赌你会喜欢的。
【解决方案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();
}

【讨论】:

    【解决方案4】:

    使用 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 或其他地方。

    【讨论】:

      【解决方案5】:

      对于那些刚接触 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()
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2013-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-12
        • 2021-07-20
        • 2015-06-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多