3

ファイルの内容を処理する 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() に戻すことはできません)。

4

2 に答える 2