首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在不同文件系统之间复制目录内容的干净方法?

在不同文件系统之间复制目录内容的干净方法?
EN

Stack Overflow用户
提问于 2016-01-22 15:38:37
回答 2查看 551关注 0票数 5

我想将文件从一个java.nio.file.FileSystem复制到另一个。例如,从默认文件系统到com.google.common.jimfs.Jimfs

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-22 15:55:33

我为这个用例编写了一些实用程序类。这个库是开源的,也许你会发现它很有用:

代码语言:javascript
复制
CopyFileVisitor.copy(srcPath, targetPath);  

Maven:

代码语言:javascript
复制
<dependency>
    <groupId>org.softsmithy.lib</groupId>
    <artifactId>softsmithy-lib-core</artifactId>
    <version>0.5</version>
</dependency>

教程:http://www.softsmithy.org/softsmithy-lib/lib/0.5/docs/tutorial/nio-file/index.html

Javadoc:http://www.softsmithy.org/softsmithy-lib/lib/0.5/docs/api/softsmithy-lib-core/index.html

源代码:http://github.com/SoftSmithy/softsmithy-lib

票数 3
EN

Stack Overflow用户

发布于 2016-01-22 15:38:37

下面我介绍了一个可以在Java中使用的解决方案,如下所示:

代码语言:javascript
复制
// Java code
import com.google.common.jimfs.Jimfs;
import org.junit.Test;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

public class UsageExamples
{
  @Test
  public void UsageExample() throws IOException
  {
    Path dir  = Jimfs.newFileSystem().getPath("dirWithSomeContents");
    Path dest = Jimfs.newFileSystem().getPath("destDir");
    Files.createDirectory(dir);
    Files.createDirectory(dest);

    // Act
    new FileSystemsOperations().copyDirContentsRecursivelyToDirInDifferentFileSystem(dir, dest);
  }
}

我在Groovy中的解决方案(完整代码论GitHub):

代码语言:javascript
复制
// Groovy code
import java.nio.file.Files
import java.nio.file.Path

class FileSystemsOperations
{

  void copyDirContentsRecursivelyToDirInDifferentFileSystem(Path srcDir, Path destDir)
  {
    assert Files.isDirectory(srcDir)
    assert Files.isDirectory(destDir)
    assert srcDir.fileSystem != destDir.fileSystem

    srcDir.eachFileRecurse {Path it ->
      copyPath(it, srcDir, destDir) }
  }


  private static Path copyPath(Path it, Path src, Path dest)
  {
    assert it != null
    assert Files.isDirectory(src)
    assert Files.isDirectory(dest)

    Path itInDest = mapToDestination(it, src, dest)

    assert !Files.exists(itInDest)

    if (Files.isDirectory(it))
    {
      Files.createDirectory(itInDest)

    } else if (Files.isRegularFile(it))
    {
      Files.copy(it, itInDest)

    } else
      assert false

    return itInDest
  }

  private static Path mapToDestination(Path path, Path srcDir, Path destDir)
  {
    return destDir.resolve(srcDir.relativize(path).toString().replace(srcDir.fileSystem.separator, destDir.fileSystem.separator))
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34950414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档