0

データ収集プログラムでログファイルの名前を変更するメソッドを作成しようとしていますが、IOException一度アクセスした直後に(データの2番目のトレースで)ログファイルにアクセスしようとすると、(まれに)スローされるメソッドがあります。

それがへの呼び出しによるものなの.delete()か、ファイルにアクセスする前にファイルが閉じていることを確認する必要があるのか​​はわかりません。私は本当にこれに固執しています。これが私が取り組んでいる方法です。

public static void renameFile(String oldName, String newName) throws IOException
{
    File srcFile = new File(oldName).getAbsoluteFile();
    boolean bSucceeded = false;
    try 
    {
        File destFile = new File(newName).getAbsoluteFile();
        if (destFile.exists()) 
        {
            if (!destFile.delete()) 
            {
                throw new IOException(oldName + " was not successfully renamed to  " + newName + ", could not perform !destFile.delete()");                 
            }
        }
        if (!srcFile.renameTo(destFile))
        {
            throw new IOException(oldName + " was not successfully renamed to " + newName + ", could not rename source file");          
        } 
        else 
        {
            bSucceeded = true;
        }
    } 
    finally 
    {
        if (bSucceeded) 
        {
            srcFile.delete();
        }
    }
}
4

1 に答える 1

2

コードは問題ないようですが、おっしゃったように、このメソッドを呼び出す前にファイルを閉じる必要があります。Unix ではこれが機能する可能性がありますが、Windows では、開いているファイル記述子を持つファイルの名前を変更したり削除したりすることはできません。

于 2012-08-06T20:35:55.663 に答える