Java File.renameTo()似乎是有问题的,特别是在Windows上.正如API文档所说,
此方法行为的许多方面本质上依赖于平台:重命名操作可能无法将文件从一个文件系统移动到另一个文件系统,它可能不是原子的,如果具有目标抽象路径名的文件可能不会成功已经存在.应始终检查返回值以确保重命名操作成功.
就我而言,作为升级过程的一部分,我需要移动(重命名)一个可能包含千兆字节数据的目录(许多子目录和不同大小的文件).移动总是在同一个分区/驱动器内完成,因此没有必要实际移动磁盘上的所有文件.
这里不应该有任何文件锁定的目录中的内容被移动了,不过,很多时候,renameTo()无法完成其工作,并返回false.(我只是猜测某些文件锁可能会在Windows上随意过期.)
目前我有一个使用复制和删除的回退方法,但这很糟糕,因为它可能需要很长时间,具体取决于文件夹的大小.我还在考虑简单地记录用户可以手动移动文件夹以避免等待数小时的事实.但正确的方式显然是自动而快速的.
所以我的问题是,您是否知道使用普通JDK或某些外部库在Windows上使用Java快速移动/重命名的另一种可靠方法.或者,如果您知道一种简单的方法来检测和释放给定文件夹及其所有内容(可能是数千个单独的文件)的任何文件锁,那也没关系.
编辑:在这种特殊情况下,我们似乎只是renameTo()考虑了一些事情而离开了; 看到这个答案.
我有一组机器,每个机器都运行一个Java应用程序.
这些Java应用程序需要resource.txt可靠地访问唯一文件.
我需要将temp.txt文件原子地重命名为resource.txtJava,即使resource.txt已经存在.
删除resource.txt和重命名temp.txt不起作用,因为它不是原子的(它创建了一个resource.txt不存在的小时间帧).
它应该是跨平台的......
谢谢 !
我有eclipse插件jface应用程序.线程通过BufferedWriter写入文件.写完后我关闭缓冲区后我尝试重命名文件.
但有时文件不会重命名!
我尝试在几次重试之间添加一些Thread.Sleep(BIG_NUMBER),这没有用.
它看起来像文件获得某种锁定.(当我杀死jvm时,我可以重命名该文件).
有什么我可以做的吗?
操作系统:Windows XP,Windows 7 JAVA版本:1.5
我正在尝试实现压缩和解压缩文件的程序.我想要做的就是压缩文件(fileName.fileExtension),其名称为fileName.zip,并在解压缩时再次将其更改为fileName.fileExtension.
我想通过Scala代码重命名系统中的文件.等同于bash可以做的事情,
mv old_file_name new_file_name
Run Code Online (Sandbox Code Playgroud)
我不是要求重命名scala源代码文件,而是重命名驻留在系统中的文件.
尝试获取一个mp3文件并使用字符串变量将其重命名。例如,我有一个古典音乐文件夹C:/ classical,并且我想将一首名为vivaldi的歌曲重命名为FourSeasons。我想找到初始文件C:/classical/vivaldi.mp3的绝对路径,然后提供一个字符串“ FourSeasons.mp3”,并将文件C:/classical/vivaldi.mp3更改为C:/ classical /FourSeasons.mp3。
我曾经考虑过使用namedTo和文件编写器,但是这些都没有给我想要的结果。RenameTo代码:这将返回false(重命名失败),并且倾向于永久删除我的文件。
public static void main(String[] args) {
File mp3 = new File("C:/mp3.mp3");
boolean renamestatus = mp3.renameTo(new File("song.mp3"));
System.out.println(renamestatus);
}
Run Code Online (Sandbox Code Playgroud)
我还尝试使用FileReader和FileWriter来使用新名称制作文件的精确副本。此方法输出一个mp3文件,该文件会跳过并且听起来像输入文件一样不远。这是我的fileWriter代码:
File inputFile = new File("C:/mp3.mp3");
File outputFile = new File("C:/song.mp3");
FileReader in = new FileReader(inputFile);
FileWriter out = new FileWriter(outputFile);
int c;
while ((c = in.read()) != -1)
out.write(c);
in.close();
out.close();
Run Code Online (Sandbox Code Playgroud) 我们如何使用java重命名文件夹中的所有文件?
C:/temp/pictures/1.jpg
C:/temp/pictures/2.jpg
C:/temp/pictures/3.jpg
C:/temp/pictures/4.jpg
C:/temp/pictures/5.jpg
Run Code Online (Sandbox Code Playgroud)
重命名为
C:/temp/pictures/landscape_1.jpg
C:/temp/pictures/landscape_2.jpg
C:/temp/pictures/landscape_3.jpg
C:/temp/pictures/landscape_4.jpg
C:/temp/pictures/landscape_5.jpg
Run Code Online (Sandbox Code Playgroud)
亲切的问候
我正在尝试编写一个只更改文件名而不用读取和写入不同名称的代码,是否有内置函数?我试图寻找
如果没有,最好的方法是用新名称重写它?
我正在寻找一个将文件重命名为字符串的方法.renameTo只接受另一个文件作为参数,但我希望它取一个字符串.所以基本上,我如何在这里实现这个方法?
public static void renameFile(File toBeRenamed, String new_name) {
}
Run Code Online (Sandbox Code Playgroud)
我想将文件"toBeRenamed"重命名为"new_name".我是否必须创建另一个名为new_name的文件,或者是否有一些解决方法?谢谢!
编辑:感谢Luiggi的回答.这是新错误的图片:

我想将文件重命名140103122005+0530_Penguins.jpg为Penguins.jpg同一目录.
我试过renameTo()但它不工作,它需要目标文件,我没有目标文件.
任何人都可以告诉我如何使用Java从同一目录重命名相同的文件.
java ×9
file ×7
rename ×3
file-io ×2
directory ×1
file-rename ×1
filewriter ×1
mp3 ×1
scala ×1
windows ×1