java如何找出重命名失败的原因?
我正在使用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();
结果是:
[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
我想知道一个系统的方法来找出原因。谢谢
# 1 楼答案
也可能是因为您没有足够的权限而无法重命名文件。在Unix上,这很简单。在Win10上,嗯。。。见例https://www.sevenforums.com/tutorials/1911-take-ownership-shortcut.html
# 2 楼答案
renameTo失败的三个主要原因(对于Android,但你可能也会发现这很有用)
1)如果要将文件夹从位置a移动到位置b,则目标文件夹可能是文件!创建destinationFolder。mkdirs()使其成为文件
2)目标文件夹可能已经存在!删除destinationFolder,以便可以使用Rename to将旧文件移动到新位置
3)将内部存储移动到外部存储需要许可,因为读写SD卡需要许可
# 3 楼答案
我也有类似的问题,但这是unix的问题
重命名随机失败。我重新启动了这个过程3到4次,最终成功了
仅供参考,该文件由同一进程创建,并由同一进程重命名