spring引导使用java复制文件夹。SpringBoot资源文件夹中的nio包
我正在Spring Boot中构建一个实用程序应用程序,当根据不同的参数触发时,它将生成一个zip文件,其中包含从src/main/resources文件夹复制的内容。这是将文件从src/main/resources复制到将被压缩的临时目录的代码
URI srcUri = getClass().getClassLoader().getResource(srcDest.getSrc()).toURI();
copyFileOrFolder(Path.of(srcUri),Files.createDirectories(projectRoot.resolve(srcDest.getDest())));
其中src是src/main/resources(如/samples/folders)中的相对路径
protected void copyFileOrFolder(Path src, Path dest) throws IOException {
System.out.println(" src path "+src);
if (Files.isDirectory(src) == false) {
copy(src, dest);
} else {
try (Stream<Path> stream = Files.walk(src)) {
System.out.println("copyFileOrFolder: " + src);
stream.forEach(source -> copy(source, dest.resolve(src.relativize(source))));
}
}
}
protected void copy(Path source, Path dest) {
try {
Files.copy(source, dest, REPLACE_EXISTING);
} catch (Exception e) {
throw new RuntimeException(e.getMessage(), e);
}
}
如果从IntelliJ运行,上面的代码工作正常。但是当你从一个肥罐子里跑出来的时候。我在从fat jar访问文件的nio路径方面遇到了很多问题。这是日志
Copying samples/resources/aws.yml to .github/workflows/aws-deploy.yml
URI for src jar:file:/C:/code/finalaccelerator/testdev/target/testdev-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/samples/resources/aws.yml
java.nio.file.FileSystemNotFoundException: null
at jdk.zipfs/jdk.nio.zipfs.ZipFileSystemProvider.getFileSystem(ZipFileSystemProvider.java:169) ~[jdk.zipfs:na]
at jdk.zipfs/jdk.nio.zipfs.ZipFileSystemProvider.getPath(ZipFileSystemProvider.java:155) ~[jdk.zipfs:na]
at java.base/java.nio.file.Path.of(Path.java:208) ~[na:na]
at com.initializer.contributors.BaseContributor.contribute(BaseContributor.java:37) ~[classes!/:0.0.1-SNAPSHOT]
使用nio包从胖罐子复制文件/文件夹的最佳过程是什么。我尝试了commons FileUtils,但它在内部也使用了nio路径,并得到了相同的错误
尝试了许多其他步骤并提到了https://mkyong.com/java/java-read-a-file-from-resources-folder/,但也出现了类似的错误
更新
我可以通过以下更改来复制单个文件
protected void copyFileOrFolder(String src, Path dest) throws IOException {
System.out.println(" src path "+src);
try {
InputStream is = getClass().getClassLoader().getResourceAsStream(src);
Files.copy(is, dest, REPLACE_EXISTING);
} catch (Exception e) {
throw new RuntimeException(e.getMessage(), e);
}
}
我在尝试复制整个文件夹时仍面临问题,文件存在问题。走或走小路。对于jar中的文件
共 (0) 个答案