冗余使用.delete()

时间:2012-08-06 20:30:33

标签: java file-io

我正在尝试创建一个重命名数据收集程序中的日志文件的方法,但是在访问日志文件后不久尝试访问日志文件时(不经常)会抛出IOException(对于第二个数据痕迹)。

我不知道是不是因为调用.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();
        }
    }
}

1 个答案:

答案 0 :(得分:2)

代码似乎没问题,但正如您所提到的,您必须确保在调用此方法之前关闭该文件。在Unix上,这可能有效,但在Windows上你绝对不能重命名或删除具有打开文件描述符的文件。