ファイルの内容を処理する Java アプリケーションがあり、それを別の場所に移動する必要があります。
これは私がファイルを読む方法です:
String filePath = new String("foo.bar");
String fileContents = new String("");
char[] myBuffer = new char[chunkSize];
int bytesRead = 0;
BufferedReader in;
try {
FileReader fr = new FileReader(filePath);
in = new BufferedReader(fr);
try {
while ((bytesRead = in.read(myBuffer,0,chunkSize)) != -1)
{
//System.out.println("Read " + bytesRead + " bytes. They were: " + new String(myBuffer));
fileContents+= new String(myBuffer).substring(0, bytesRead);
}
// close the stream as I don't need it anymore. (If I don't close it, then java would hold the file open thus preventing the subsequent move of the file)
in.close();
fr.close();
} catch (IOException e) {
e.printStackTrace();
return null;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
}
入力ストリームとファイルリーダーの両方を閉じると、ファイルを閉じる必要があります。
次に、この後、ファイルを別のディレクトリに移動しようとしましたFile.renameTo(newFileName);
が、これは失敗します(UNIXでは!、Windowsでは正常に動作します)
移動が失敗した直後に、というファイルを作成できるnewFileName
かどうか、および元のファイルを削除できるかどうかをテストします。新しいファイルは作成されますが、元のファイルは削除されません。興味深いことに、アプリケーションの実行中 (障害発生直後) に、コマンド ラインから元のファイルを削除できます。
それがなぜなのか、それとも代替案なのか、何か考えはありますか?
詳細: 私は unix で作業しており、従来の理由から Java 1.6 を使用する必要があります (したがって、Java 1.7 以降でサポートされている Files.move() に戻すことはできません)。