【发布时间】:2022-01-20 20:29:24
【问题描述】:
在我的资源文件夹中,我有一个名为 init 的文件夹。我想将该文件夹和其中的所有内容复制到 jar 外部名为 ready 的文件夹中。我想在不使用任何外部库的情况下做到这一点,只使用纯 java。
我已经尝试了以下
public static void copyFromJar(String source, final Path target)
throws
URISyntaxException,
IOException
{
URI resource = ServerInitializer.class.getResource("").toURI();
FileSystem fileSystem = FileSystems.newFileSystem(resource, Collections.<String, String>emptyMap());
final Path jarPath = fileSystem.getPath(source);
Files.walkFileTree(jarPath, new SimpleFileVisitor<>()
{
private Path currentTarget;
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs)
throws
IOException
{
currentTarget = target.resolve(jarPath.relativize(dir).toString());
Files.createDirectories(currentTarget);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
throws
IOException
{
Files.copy(file, target.resolve(jarPath.relativize(file).toString()),
StandardCopyOption.REPLACE_EXISTING);
return FileVisitResult.CONTINUE;
}
});
}
但是我的应用程序已经挂了
FileSystem fileSystem = FileSystems.newFileSystem(resource, Collections.<String, String>emptyMap());
例外
java.lang.IllegalArgumentException: Path component should be '/'
当我打电话时
copyFromJar("/init", Paths.get("ready");
知道我做错了什么吗?或者有人可以提供代码来将目录从 jar 复制到外部而不使用任何外部库吗?
仅供参考,我已经查看了this 解决方案,但它太旧并且使用 apache 库,但我需要适用于 windows 和 linux 的纯 java 解决方案。
【问题讨论】:
标签: java jar java-11 getresource