关于fileutils:如何将单个文件夹及其内容复制到Java中的另一个文件夹

您所在的位置:网站首页 经典宋诗20首 关于fileutils:如何将单个文件夹及其内容复制到Java中的另一个文件夹

关于fileutils:如何将单个文件夹及其内容复制到Java中的另一个文件夹

#关于fileutils:如何将单个文件夹及其内容复制到Java中的另一个文件夹 | 来源: 网络整理| 查看: 265

我在下面编写了此函数,以查找所有名为\\'Construction Documents \\'的文件夹, 我希望它将所有内容复制到另一个目录。

123456789101112131415161718192021222324252627        private void findDirectory(File parentDirectory, String insertDir) {             if(foundFolder) {                 return;             }             File[] files = parentDirectory.listFiles();             for (File file : files) {                 if (file.isFile()) {                     continue;                 }                 if (file.getName().equals("Construction Documents")) {                     System.out.println(file.getAbsolutePath());                     if(file.getParent().contains("Original") || file.getParent().contains("Revision") || file.getParent().contains("R0")){                         new File(insertDir + file.getParent()).mkdir();                         try {                     //      FileUtils.copyDirectory(new File(file), new File(insertDir + file.getParent().toString()));                             Files.copy(file.toPath(), new File(insertDir + file.getParent().toString()).toPath());                         } catch (IOException e) {                             // TODO Auto-generated catch block                             e.printStackTrace();                         }                     }                 }                 if(file.isDirectory()) {                     findDirectory(file, insertDir);                 }             }         }

insertDir是要在其中插入文件夹的文件路径ID的字符串。我尝试使用FileUtils,但是此操作将ENTIRE目录复制了过来,包括实际施工文档文件夹之前的许多父文件。本机Java也不起作用,只会导致错误。

简而言之,我想将一个文件夹及其所有子文件夹和内容复制到另一个文件夹,但是并没有在目标端创建复制文件的所有父文件。

相关讨论 我不认为continue在做您认为的事情。它实际上将转到循环中的下一个File,而不是继续执行您的代码。 该部分实际上工作正常。在搜索要复制的适当文件夹时,该部分只是忽略文件。

遵循这些原则:

1234567891011121314151617Path srcDir = Paths.get("c:\\\\src"); Path dstDir = Paths.get("c:\\\\dst"); Files.walkFileTree(srcDir, new SimpleFileVisitor() {     @Override     public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {         Path dstSubDir = dstDir.resolve(srcDir.relativize(dir));         Files.createDirectories(dstSubDir);         return FileVisitResult.CONTINUE;     }     @Override     public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {         Path dstFile = dstDir.resolve(srcDir.relativize(file));         Files.copy(file, dstFile);         return FileVisitResult.CONTINUE;     } });

相关讨论 这仍然从网络根目录复制了所有父目录。我只想复制选择的最终文件夹及其所有子文件夹和文件。 这会将目录复制到另一个目录。没有父目录。如果需要选择子目录之一,请在preVisitDirectory()方法前加上if (!dir.getFileName().equals("w.e")) return FileVisitResult.SKIP_SUBTREE;。无论如何,walkFileTree()将成为您的朋友,并且会产生比自定义for循环更好的代码。 这没有用。也许是因为我是从网络驱动器而不是本地驱动器复制的? 调试吗?我假设您使用的是Windows,而NTFS在这两者之间几乎没有任何区别。您的网络共享实现很可能实现文件遍历和文件复制。因此,调试它。 我发现了我的错误。这是因为当我需要新的File(insertDir file.getParentFile.getParentFile()。getName()时,我有了新的File(insertDir file.getParent()。toString())



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3