java - .delete() 的冗余使用

标签 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();
        }
    }
}

最佳答案

代码看起来不错,但是正如您提到的,您必须确保在调用此方法之前关闭文件。在 Unix 上,这可能有效,但在 Windows 上,您绝对不能重命名或删除具有打开文件描述符的文件。

关于java - .delete() 的冗余使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11835487/

相关文章:

java - Java中时域到频域的转换

java - Apache Spark : Update global variables in workers

java - JAXB:默认情况下哪些元素是可编码|不可编码的?

python - 在 Python 中关闭文件

java - Gradle - 覆盖初始化脚本

java - 如何初始化一个迭代器

python - 如何使用python读取文本文件中的数字?

.net - 异步文件IO线程安全吗?

java - 用偶数和奇数分隔文件中的行

java - 如何检测文件(具有任何扩展名)是否存在于java中