Java:将文本文件的内容打印到屏幕

Java:将文本文件的内容打印到屏幕,java,text,io,java-7,Java,Text,Io,Java 7,我有一个名为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

我有一个名为
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);
   }
}

对于那些不熟悉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的资源试用,Jiri的答案可以得到改进:

try (BufferedReader br = new BufferedReader(new FileReader("foo.txt"))) {
   String line = null;
   while ((line = br.readLine()) != null) {
       System.out.println(line);
   }
}

在您选择的位置添加异常处理,无论是在此
尝试还是其他地方。

为什么没有人认为它值得一提

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文件的信息……我告诉你!我到处都找不到这个!是的,我使用谷歌。过去的这个问题只是你想要了解的细节:。@user2151887:所以你没有尝试这个<我告诉你!我到处都找不到这个!是的,我使用谷歌
。我觉得这很难相信。我看过的任何教科书或一般教程都有一个关于文件I/O的部分。你看过本页右侧提供给你的链接吗?我认为标题为“Readig a Text File in Java”的是一个很好的起点。但是编码呢?此代码取决于平台默认编码。对,我想提供最简单的情况。如果您想显式指定编码,那么您可以使用
,)
,而不是
文件阅读器
…因为问题是关于Java的,这意味着代码应该过于冗长,而且难以理解(您问过!)。如果您还没有尝试过Groovy(Java语法兼容的JVM运行),我打赌您一定会喜欢它。