私は、バッファ付きのWriterとFileWriterを使ってJavaプログラム(csv形式)のロガーを作成しています。プログラムが実行され、ファイルへの書き込みを続けている間、私は、CSVファイルを開くとファイルをJavaで書き込む - 閉じるまたはフラッシュする
、私はこの例外が発生しました:「それは別のプロセスによって使用されているため、プロセスはファイルにアクセスできません」。私が欲しいもの
は、プログラムが実行されている間、私は、CSVファイルを開くと、csvファイルを読み込みモードで開きますされ、プログラムがファイルに正常に書き込みます。
Iは.flush()にBufferedWriterの及びてFileWriterの閉鎖を変更することによってそれを解決代わり.close()(元のクローズ機能付き)
オリジナル最小ロガーコード
public class logger {
private BufferedWriter bw = null;
private FileWriter fw = null;
private File file = null;
logger(String nclass) {
path = "c:\\test\\test.csv";
this.file = new File(path);
// Check if the file is already exist.
if (!file.exists()) {
file.createNewFile();
}
fw = new FileWriter(file.getAbsoluteFile(), true);
bw = new BufferedWriter(fw);
}
public void writeToFile(String msg) {
entryWrite();
try {
fw = new FileWriter(file.getAbsoluteFile(), true);
bw = new BufferedWriter(fw);
fw.append(msg);
} catch (IOException e) {
e.printStackTrace();
} finally {
close();
exitWrite();
}
}
の
}
private void close() {
try {
if (bw != null) {
bw.close();
bw = null;
}
if (fw != null) {
fw.close();
fw = null;
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
私のソリューション機能
private void close() {
try {
if (bw != null) {
bw.flush();
bw = null;
}
if (fw != null) {
fw.flush();
fw = null;
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
今、私の答えは、それがOKであれば、ストリームを閉じて、ちょうどフラッシュを使用しないのですか? 後で問題が生じることはありますか?なぜなら、私のすべてのテストでは、うまく動作するからです。
感謝!!
完全な[mcve]を表示してください。重要な面がたくさんあります。そしてまずは。私はFileWriterを使ってBufferedWriterを作成していると思います。なぜ地球上で両方のメソッドを呼び出すのですか(外側のライターをフラッシュ/閉じる必要があります) – GhostCat
@GhostCat - 追加されました。 – Idon89
DUPとして閉じて、http://stackoverflow.com/questions/16584777/is-it-necessary-to-close-a-filewriter-provided-it-is-written-through-a-buffered ...にする必要があります。このコードは実際には...申し訳ありませんが、悪いです。 – GhostCat