关于fileutils:如何将单个文件夹及其内容复制到Java中的另一个文件夹 |
您所在的位置:网站首页 › 经典宋诗20首 › 关于fileutils:如何将单个文件夹及其内容复制到Java中的另一个文件夹 |
我在下面编写了此函数,以查找所有名为\\'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 |