复制目录中的文件并更改文件名

Posted

技术标签:

【中文标题】复制目录中的文件并更改文件名【英文标题】:Copy files within directory and change filename 【发布时间】:2017-06-13 21:15:28 【问题描述】:

我有一个程序应该将整个文件夹(带有子文件夹)中的所有文件重命名为临时文件名,将它们复制到不同的目录,然后将临时文件名更改回原始文件名。在此过程中,我想保持所有文件夹名称相同。当我运行下面的代码时,它所做的只是更改我指定的路径中***文件夹的名称:

package shortenFilenames;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

public class shortenFilenameClass 


        public static void main(String[] args) throws IOException 
        
            String absolutePathLocal = "C:\\Users\\talain\\Desktop\\marketingOriginal"; //original files
            String absolutePathOnedrive= "C:\\Users\\talain\\Desktop\\fakeOnedrive"; //path to onedrive

            File local = new File(absolutePathLocal);
            File onedrive = new File(absolutePathOnedrive);

            File[] filesInDir = local.listFiles();
            for(int i = 0; i < filesInDir.length; i++) 
            
                    String name = filesInDir[i].getName();
                    System.out.println(name);
                    String newName = String.valueOf(i);

                    File oldPath = new File(absolutePathLocal + "\\" + newName);
                    System.out.println("oldPath: " + oldPath);
                    filesInDir[i].renameTo(new File(oldPath.toString()));

                    File newPath = new File(absolutePathOnedrive + "\\" + newName);
                    copyFileUsingJava7Files(oldPath, newPath);

                    newPath.renameTo(new File(newPath.toString()));

                   System.out.println("renamed: " + name + "to: " + newName + ", copied to one drive, and changed back to original name");

            
           

        private static void copyFileUsingJava7Files(File source, File dest) throws IOException 
            Files.copy(source.toPath(), dest.toPath());
        

【问题讨论】:

为什么要在复制时更改临时文件的名称,然后将名称更改回原始名称...为什么不简单地将本地路径中的所有文件复制到一个驱动器路径不改名字? 因为我尝试复制的某些文件的文件名太长,而文件资源管理器不允许我复制它们。 我从来没有听说过因为名字太长而阻止复制的文件浏览器!!!!那是什么文件资源管理器?为什么不允许他们?尝试复制它们时收到什么错误消息? File oldPath = new File(absolutePathLocal + "\\" + newName); 其中 newName 实际上是 String newName = String。 valueOf(i);,表示您未能提供文件的格式。你可能也想看看这件事 【参考方案1】:

我刚刚做了以下操作,它将第一个路径中的所有文件复制到第二个路径中。如果它对您来说失败,请向我显示错误输出。

for(int i = 0; i < filesInDir.length; i++) 

    String name = filesInDir[i].getName();
    System.out.println(name);
    Files.copy(new File(absolutePathLocal + "\\" + name).toPath(),new File(absolutePathOnedrive + "\\" + name).toPath());

您的代码还假定这些目录已经存在于您的系统上,否则您将遇到 FileNotFound 异常。

【讨论】:

以上是关于复制目录中的文件并更改文件名的主要内容,如果未能解决你的问题,请参考以下文章

从一个目录复制文件并替换多个目录中的文件

按文本字符长度对目录中的文件进行排序并复制到其他目录[关闭]

使用 PHP 递归搜索目录中的文件并更改值

批处理文件比较目录中相似的文件名,然后复制最后修改的文件并保存到其他目录

列出所有子目录中的所有 *.jpg 文件并复制到新文件夹

如何在 PhoneGap 1.x 中更改起始页