web-dev-qa-db-ja.com

Java:テキストファイルの内容を画面に出力

foo.txtという名前のテキストファイルがあり、その内容は次のとおりです。

この

テキスト

Java 7でこの正確なファイルを画面にどのように印刷しますか?

20
user2151887

前Java 7:

 BufferedReader br = new BufferedReader(new FileReader("foo.txt"));
 String line = null;
 while ((line = br.readLine()) != null) {
   System.out.println(line);
 }
  • 例外処理を追加する
  • ストリームを閉じて追加

Java 7)なので、autocloseableを実装するため、ストリームを閉じる必要はありません。

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

スキャナーに言及する価値があると誰も思わなかったのはなぜですか?

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

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

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または他の場所で、選択した場所に例外処理を追加します。

2
Dariusz

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()
    }
}
2
Joe

ここのすべての例は、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();
}
1
vitfo