我们可以重命名文件说test.txt来test1.txt?
如果test1.txt存在,它会重命名吗?
如何将其重命名为现有的test1.txt文件,以便将test.txt的新内容添加到其中以供以后使用?
Java File.renameTo()似乎是有问题的,特别是在Windows上.正如API文档所说,
此方法行为的许多方面本质上依赖于平台:重命名操作可能无法将文件从一个文件系统移动到另一个文件系统,它可能不是原子的,如果具有目标抽象路径名的文件可能不会成功已经存在.应始终检查返回值以确保重命名操作成功.
就我而言,作为升级过程的一部分,我需要移动(重命名)一个可能包含千兆字节数据的目录(许多子目录和不同大小的文件).移动总是在同一个分区/驱动器内完成,因此没有必要实际移动磁盘上的所有文件.
这里不应该有任何文件锁定的目录中的内容被移动了,不过,很多时候,renameTo()无法完成其工作,并返回false.(我只是猜测某些文件锁可能会在Windows上随意过期.)
目前我有一个使用复制和删除的回退方法,但这很糟糕,因为它可能需要很长时间,具体取决于文件夹的大小.我还在考虑简单地记录用户可以手动移动文件夹以避免等待数小时的事实.但正确的方式显然是自动而快速的.
所以我的问题是,您是否知道使用普通JDK或某些外部库在Windows上使用Java快速移动/重命名的另一种可靠方法.或者,如果您知道一种简单的方法来检测和释放给定文件夹及其所有内容(可能是数千个单独的文件)的任何文件锁,那也没关系.
编辑:在这种特殊情况下,我们似乎只是renameTo()考虑了一些事情而离开了; 看到这个答案.
我正在使用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)
我想知道一种系统的方法来找出原因.谢谢.
我希望能够重命名文件夹列表以删除不需要的字符(例如,点和双空格必须成为单个空格).
单击Gui中的按钮后,您将看到一个消息框,其中显示格式正确的名称,表示格式化正确并且调用了该函数.当我查看我创建的测试文件夹时,名称不会更改(甚至在刷新后也不会更改).使用硬编码字符串也不起作用.
我在俯瞰什么?
public void cleanFormat() {
for (int i = 0; i < directories.size(); i++) {
File currentDirectory = directories.get(i);
for (File currentFile : currentDirectory.listFiles()) {
String formattedName = "";
formattedName = currentFile.getName().replace(".", " ");
formattedName = formattedName.replace(" ", " ");
currentFile.renameTo(new File(formattedName));
JOptionPane.showMessageDialog(null, formattedName);
}
}
}
Run Code Online (Sandbox Code Playgroud) [编辑]我无法用类的renameTo()方法重命名我的文件File.好的,我搜索并找到了解释相同的问题
我还阅读了Java Doc,renameTo()其中说:
此方法行为的许多方面本质上依赖于平台:重命名操作可能无法将文件从一个文件系统移动到另一个文件系统,它可能不是原子的,如果具有目标抽象路径名的文件可能不会成功已经存在.应始终检查返回值以确保重命名操作成功.
好的,我知道该renameTo()方法依赖于平台.
然后我创建了对象FileOutputStream和调用close()方法,现在我尝试了renameTo()方法,我的文件被重命名,
题:
FileOutputStream我renameTo()方法的对象后,我无法理解为什么会这样做?环境: Windows XP,用户:管理员
码:
File f = null;
File f1 = null;
boolean isFileRenamed = false;
try {
// create new File objects
f = new File("C:\\originalFile.txt");
f1 = new File("C:\\renamedFile.txt");
// I need to write following code to rename the file
// I tried without FileOutputStram object but then …Run Code Online (Sandbox Code Playgroud)