从 java 项目资源复制目录和文件

Copy directory and files from java project resource

我需要复制位于我的 java 项目中的目录 "src" 作为公共资源。此 "src" 文件夹包含其他子文件夹和文件,因此我也需要复制它们。我怎样才能实现这样的目标? 我面临的主要问题是我无法检索 "src" 文件夹的绝对路径。 一个解决方案是逐个文件复制,但它们太多了,我想找到更好的解决方案

谢谢

编辑: 当用户单击 "Generate" 按钮时,我的应用程序会向用户询问生成一些文件的目标位置。此目标位置是我要复制我的 "src" 文件夹及其所有子文件夹的位置。 "src" 文件夹,如上所述,位于我的 java 项目主文件夹中。

如果您想从 jar 文件中提取源代码,您可以从这个简短的示例开始

public class UnZip {

    public static void main(String argv[]) {
        String destDir = "/tmp/";
        String sourceJar = "your_src.jar";

        try (ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(sourceJar)))) {
            ZipEntry zipEntry;
            while ((zipEntry = zis.getNextEntry()) != null) {
                File newDestination = new File(destDir + zipEntry.getName());
                if (zipEntry.isDirectory()) {
                    unzipDir(newDestination);
                } else {
                    unzipFile(newDestination, zis);
                }
            }
        } catch (IOException ex) {
            System.err.println("input file coud not be read " + ex.getMessage());
        }
    }

    private static void unzipFile(File file, final ZipInputStream zis) {
        System.out.printf("extract to: %s - ", file.getAbsoluteFile());
        if (file.exists()) {
            System.out.println("already exist");
            return;
        }
        int count;
        try (BufferedOutputStream dest = new BufferedOutputStream(new FileOutputStream(file), BUFFER_SIZE)) {
            while ((count = zis.read(BUFFER, 0, BUFFER_SIZE)) != -1) {
                dest.write(BUFFER, 0, count);
            }
            dest.flush();
            System.out.println("");
        } catch (IOException ex) {
            System.err.println("file could not be created " + ex.getMessage());
        }
    }

    private static void unzipDir(File dir) {
        System.out.printf("create directory: %s - ", dir);
        if (dir.exists()) {
            System.out.println("already exist");
        } else if (dir.mkdirs()) {
            System.out.println("successful");
        } else {
            System.out.println("failed");
        }
    }

    static final int BUFFER_SIZE = 2048;
    static byte[] BUFFER = new byte[BUFFER_SIZE];
}

我解决了创建我需要生成的应用程序的 zip 存档的问题。然后从我的项目中解压缩从资源文件夹中获取的存档,然后打开我需要修改的 java 文件的流并对其进行编辑。 这是代码,类似于次优的解决方案

UnzipUtility unzipper = new UnzipUtility();
InputStream inputStream = getClass()
        .getResource("/template/template.zip").openConnection()
        .getInputStream();
unzipper.unzip(inputStream, parentFolder.getCanonicalPath());

UnzipUtility class 来自这个例子:http://www.codejava.net/java-se/file-io/programmatically-extract-a-zip-file-using-java