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

时间:2015-01-08 11:56:32

标签: java file-io resources

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

谢谢

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

2 个答案:

答案 0 :(得分:0)

如果要从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];
}

答案 1 :(得分:0)

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

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

UnzipUtility类来自此示例:http://www.codejava.net/java-se/file-io/programmatically-extract-a-zip-file-using-java