我正在尝试使用java FileSystem压缩目录中的文件。当只有很少的文件时它工作正常,但是当文件超过100个时它会失败。
这是我在程序中使用的代码:
Map<String, String> env = new HashMap<>();
env.put("create", "true");
URI uri = URI.create("jar:file://10.0.8.31/Shared/testFile.zip");
long bytesRead = 0;
File dir = new File("D:\\Shared\\DPXSequence");
try (FileSystem zipfs = FileSystems.newFileSystem(uri, env)) {
for (File sourceF : dir.listFiles()) {
Path externalFile = Paths.get(sourceF.getAbsolutePath());
Path pathInZipfile = zipfs.getPath("/" + sourceF.getName());
// copy a file into the zip file
Files.copy(externalFile, pathInZipfile, StandardCopyOption.REPLACE_EXISTING);
}
}
catch(Exception e) {
System.out.println("Error : "+e.toString());
}
这是我得到的错误:
Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
我做错了什么?
我认为Files.copy()
执行在实际压缩并复制到目标文件夹之前完成。这是导致这个问题吗?
答案 0 :(得分:1)
您要复制的文件要么很大,要么出于某种原因System.gc()没有被激活并清理使用的内存。
请检查以下内容:
在方法
中的files.copy之后输入[System.gc();]OR
运行分配了更多内存的java程序:
java -Xmx1024M -Xms1024M -jar jarName.jar(如果是jar) Xmx是您要分配的最大金额(以M为单位的MB),Xms是初始金额。你可以用你想要的任何东西替换1024,只是不要超过计算机上的RAM。