10

ファイルにデータを書き込むメソッドがあります。を使用しPrintWriter、以下に示すようBufferedWriterFileWriter

public void writeToFile(String FileName){
    PrintWriter pw = null;
    try {
        pw = new PrintWriter(new BufferedWriter(new FileWriter(FileName)));
        for(Cars car : list){
            pw.println(car.getType());
            pw.println(car.getMaxSpeed());
            pw.println(car.getOwner());
            pw.println();
            pw.flush();
        }
        pw.close();
    }
    catch(IOException ex){
        System.err.println(ex);
    }
}

このデータをファイルから読み取るにはどうすればよいでしょうか。InputStreamReaderBufferedReaderおよびを使用しようとしましFileInputStreamたが、NetBeans でエラー メッセージが表示されます

    public void readFromFile() throws IOException {
        InputStreamReader fr = null;
        try {
            fr = new InputStreamReader(new BufferedReader(new FileInputStream(new FileReader("c:\\cars.txt"))));
            System.out.println(fr.read());
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        } finally {
            fr.close();
        }
    }  

この方法の何が問題なのですか?

4

3 に答える 3

4

あなたのコードにはいくつかの問題があります:

1) InputStreamReader は、Reader ではなく引数として InputStream を取ります。http://docs.oracle.com/javase/6/docs/api/java/io/InputStreamReader.htmlを参照してください。

2) FileInputStream は Reader も引数として受け入れません (File、FileDescriptor、または String を取ります)。参照: http://docs.oracle.com/javase/6/docs/api/java/io/FileInputStream.html

3) BufferedReader は通常、ファイルを 1 行ずつ読み取ります。read() メソッドは 1 文字だけを読み取ります。

考えられる解決策は次のとおりです。

fr = new BufferedReader(new InputStreamReader(new FileInputStream(new File("c:\\cars.txt"))));
String line = "";
while((line = fr.readLine()) != null) {
    System.out.println(line);
}

ところで:正確なエラーメッセージまたはStackTraceを提供すれば、他の人があなたを助けやすくなります。

于 2013-04-21T20:27:51.367 に答える
1

単純なエラー:コンストラクター 'FileInputStream(java.io.FileReader)'を解決できません。必要なコンストラクターが API に存在しません。

元のコードは次のとおりです。

new PrintWriter(new BufferedWriter(new FileWriter(FileName)));

読むためには、あなたが必要です

new PrintReader(new BufferedReader(new FileReader(FileName)));

ただし、PrintReader は必要ない (存在しない) ため、必要なのは次のとおりです。

new BufferedReader(new FileReader(FileName))

PrinterWriter は、オブジェクトの書式設定された表現をテキスト出力ストリームに出力しますが、テキストを読み取るときは常に書式設定されるため、PrinterReader は存在しません。

あなたは行ごとに書いているので、行ごとに読んでください:) 例:

public void readFromFile() throws IOException {
    BufferedReader bufferedReader = null;
    try {
        String sCurrentLine;
        bufferedReader = new BufferedReader(new FileReader("c:\\cars.txt"));
        while ((sCurrentLine = bufferedReader.readLine()) != null) {
            System.out.println(sCurrentLine);
        }
    } catch (Exception ex) {
        System.out.println(ex.getMessage());
    } finally {
        bufferedReader.close();
    }
}

以上 (JDK7)

void readFromFile() throws IOException {
    Path path = Paths.get("c:\\cars.txt");
    try (BufferedReader reader = Files.newBufferedReader(path, Charset.defaultCharset())){
        String line = null;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }

    }
}
于 2013-04-21T20:32:54.047 に答える