Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java .delete()的重复使用_Java_File Io - Fatal编程技术网

Java .delete()的重复使用

Java .delete()的重复使用,java,file-io,Java,File Io,我试图创建一种方法,在数据采集程序中重命名日志文件,但在访问日志文件一次(第二次数据跟踪)后不久尝试访问日志文件时,会抛出一个IOException 我不知道是因为调用了.delete(),还是在访问文件之前必须确保文件已关闭。我真的被这件事难住了。这是我正在研究的方法 public static void renameFile(String oldName, String newName) throws IOException { File srcFile = new File(old

我试图创建一种方法,在数据采集程序中重命名日志文件,但在访问日志文件一次(第二次数据跟踪)后不久尝试访问日志文件时,会抛出一个
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上,您肯定无法重命名或删除具有打开的文件描述符的文件。

您能发布异常的完整堆栈跟踪吗?谢谢,这真的很有帮助!我将确保在文件上实现.close()