2

いくつかのヘッダーを含むテキストファイルを作成して閉じます。その後、そのファイルに書き込みたいデータがある場合、何も起こりません。コードは以下にあり、印刷しようとしたときに取得するスタックトレースです。

public class Writetofile {

    BufferedWriter writer = null;

    public void recordData(String record) throws IOException {

        try {
            writer.append(record);
            writer.newLine();
            writer.close();
        } catch (Exception e) {e.printStackTrace();
        }
    }

    public void createtxtfile(String[] details) throws IOException {
        String machine = details[0];
        String date = details[1];
        String start_time = details[2];
        try {
            File new_cal = new File("C:\\Activity_Calibrator\\log\\" + machine + "//" + machine + ".txt");
            new_cal.getParentFile().mkdirs();
            FileWriter fwriter = new FileWriter(new_cal);
            writer = new BufferedWriter(fwriter);
            writer.append("Linear Calibration for " + machine + " carried out " + date);
            writer.newLine();
            writer.close();
        } catch (Exception e) {
        }
    }
}

Message that is recieved
java.io.IOException: Stream closed
  at java.io.BufferedWriter.ensureOpen(BufferedWriter.java:116)
  at java.io.BufferedWriter.write(BufferedWriter.java:221)
  at java.io.Writer.write(Writer.java:157)
  at java.io.Writer.append(Writer.java:227)
  at Writetofile.recordData(Writetofile.java:27)
  at UserInterFace.update(UserInterFace.java:75)
  at Comms.serialEvent(Comms.java:124)
  at gnu.io.RXTXPort.sendEvent(RXTXPort.java:732)
  at gnu.io.RXTXPort.eventLoop(Native Method)
  at gnu.io.RXTXPort$MonitorThread.run(RXTXPort.java:1575)

ストリームに書き込んだ後は常にストリームを閉じる必要があることを読んだので、これを理解するのは難しいです。

4

2 に答える 2

5

何も起こらず、エラーも発生しません

適切な最初のステップは、例外を飲み込まないことです。たとえば、スタック トレースをコンソールに出力できます。

} catch (Exception e) {
    e.printStackTrace();
}

次に、問題を見つけるのに役立つ適切な例外メッセージが表示されます。

于 2012-10-31T11:34:46.150 に答える
1

この行で"//"、パスに次を追加します。

        File new_cal = new File("C:\\Activity_Calibrator\\log\\" + machine + "//" + machine + ".txt");

おそらく追加するつもり"\\"でした。

これによりファイルの作成が台無しになると思いますが、テストしないと正確にはわかりません。OSに依存する場合もあります。から返されたファイル名File.getCanonicalFile()を念のために表示します。

于 2012-10-31T11:58:28.507 に答える