Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.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
重命名文件renameTo()Java变通方法_Java_Eclipse_File Io - Fatal编程技术网

重命名文件renameTo()Java变通方法

重命名文件renameTo()Java变通方法,java,eclipse,file-io,Java,Eclipse,File Io,以下代码文件.renameTo(新文件(newPath));如果没有正确重命名所有文件,它会跳过一些我甚至使用过的文件。move(file.toPath(),path.get(newPath));但是我在eclipse中遇到了一个异常错误,称为java.nio.file.FileReadyExistsException,我认为这是因为存在一组文件,当它们被切断时,它们将具有相同的名称。是否有办法在eclipse中绕过此错误或微调renameTo() 我也试过了。子串(0,22);,名称.repl

以下代码文件.renameTo(新文件(newPath));如果没有正确重命名所有文件,它会跳过一些我甚至使用过的文件。move(file.toPath(),path.get(newPath));但是我在eclipse中遇到了一个异常错误,称为java.nio.file.FileReadyExistsException,我认为这是因为存在一组文件,当它们被切断时,它们将具有相同的名称。是否有办法在eclipse中绕过此错误或微调renameTo()

我也试过了。子串(0,22);,名称.replaceFirst(“-2017.*”,“”);和 name.substring(0,file.getName().indexOf(“-2017”)的结果相同

例如: 原始文件名:3-M-ALABAMA-SUIQUARTER2-2017200346-CD6140 控制台输出:3-M-ALABAMA-2 文件夹中的部分文件未更改:3-M-ALABAMA-SUIQUARTER2-2017200346-CD6140

for(File file:filesInDir) {
       String name = file.getName().substring(0, file.getName().indexOf("-2017"));
       String newName = name;
       System.out.println(newName); // prints prints to file 
       String newPath = absolutePathOne + "\\" + newName;
       file.renameTo(new File(newPath));
       or
       Files.move(file.toPath(), Paths.get(newPath));

您不能将某个特定文件重命名为您正在重命名文件的文件夹中已存在的文件名。IMHO…即使可以,出于一些常识原因,您也不应该这样做

换句话说,如果我们有一个名为:
All_My_Files
的文件夹(目录),并且在这个文件夹中我们有两个文本文件,一个名为
MyFile-2016.txt
,另一个名为
MyFile-2017.txt
。现在,我们想重命名这两个文件中的每一个,以使破折号和年份(即:-2016或-2017)每个文件名中的文件名不再存在。实际上,您最终要做的是将两个文件名都设置为MyFile.txt,这是不允许的。您的第一次重命名将很好,因为在第一次尝试时,名为MyFile.txt的文件夹中没有任何文件,但一旦在第二个fi上进行了第二次重命名尝试le name由于名称MyFile.txt已存在于第一次重命名尝试时完成的文件夹中,因此它将失败。这不是代码问题,这是本地文件系统的问题。这些是本地文件系统的规则(同一文件夹中的任何文件都不能具有相同的名称).查看您要重命名的文件名,是否有任何文件名在删除不需要的文本后会创建完全相同的文件名?如果有,则这些文件名将无法重命名

这同样适用于移动文件。您不能将文件移动到文件夹(目录)已包含同名文件。上述文件系统规则适用。但是,如果在移动过程中存在目标路径中的现有重复文件名,则可以覆盖该文件名。如果告诉Files.move()方法执行此操作:

Files.move(sourcePathAndFileName, destinationPathAndFileName,
           StandardCopyOption.REPLACE_EXISTING);
您将需要导入:

导入静态java.nio.file.StandardCopyOption。替换现有的;


但是请记住,在您公然覆盖现有文件之前,您最好确保这是您想要做的。提示用户执行覆盖是正常的操作过程,但不一定是特定内部操作的情况。

这个问题很难理解,您也不会这么做o必须更清楚。你所说的“当它们被切断时”是什么意思?您试图重命名的文件的示例是什么?阻止重命名的文件是什么?示例是原始文件名:3-M-ALABAMA-SUIQUARTER2-2017200346-CD6140控制台输出:3-M-ALABAMA-SUIQUARTER2文件夹中的部分文件未更改:3-M-ALABAMA-SUIQUARTER2-2017200346-CD6140I添加了其他信息吗目标文件夹中有新名称的文件了吗?我的意思是我的截止日期是我试图从-2017xxx中取出所有内容