如何找出renameTo()失败的原因?

jan*_*ith 30 java file-io file file-rename

我正在使用WinXP.我用java生成一个文件列表.该文件最初将创建为abc.txt.temp,完成生成后,它将重命名为abc.txt.

但是,当我生成文件时,某些文件无法重命名.它是随机发生的.

反正有没有找出失败的原因?

int maxRetries = 60;
logger.debug("retry");
while (maxRetries-- > 0)
{
    if (isSuccess = file.renameTo(file2))
    {
        break;
    }
    try
    {
        logger.debug("retry " + maxRetries);
        Thread.sleep(1000);
    }
    catch (InterruptedException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }   
}

//file.renameTo(file2);
Thread.currentThread().getThreadGroup().getParent().list();
Run Code Online (Sandbox Code Playgroud)

结果如下:

[DEBUG][2009-08-25 08:57:52,386] - retry 1
[DEBUG][2009-08-25 08:57:53,386] - retry 0
java.lang.ThreadGroup[name=system,maxpri=10]
    Thread[Reference Handler,10,system]
    Thread[Finalizer,8,system]
    Thread[Signal Dispatcher,9,system]
    Thread[Attach Listener,5,system]
    java.lang.ThreadGroup[name=main,maxpri=10]
        Thread[main,5,main]
        Thread[log4j mail appender,5,main]
[DEBUG][2009-08-25 08:57:54,386] - isSuccess:false
Run Code Online (Sandbox Code Playgroud)

我想知道一种系统的方法来找出原因.谢谢.

Vin*_*jip 29

重命名失败的原因可能是文件仍处于打开状态.即使您关闭文件,它也可以保持打开状态(例如):

  1. 文件句柄由进程的子进程继承
  2. 防病毒程序正在扫描文件中的病毒,因此它已打开
  3. 索引器(例如Google桌面或Windows索引服务)将文件打开

要帮助找出保持文件打开的内容,请使用FileMonHandle等工具.

更新:如果文件仅在非常短的时间内保持打开状态(如反病毒扫描的情况),则Unlocker等工具可能无济于事.但是,如果javaw.exe显示为打开文件,那就是你的问题.