有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案