我目前正在尝试将图像文件复制到现有的zip文件(如附加它)。但是输出是空的(意思是:文件实际上甚至存在 - 它只显示为占用0个字节而无法打开/提取)。
这是我的代码示例:
Map<String, String> env = new HashMap<>();
env.put("create", "true");
Path path = Paths.get("countMap.zip");
java.net.URI uri = java.net.URI.create("jar:" + path.toUri());
try (FileSystem fs = FileSystems.newFileSystem(uri, env)) {
Path nf = fs.getPath("mario.png");
try (OutputStream zos = Files.newOutputStream(nf, StandardOpenOption.CREATE)) {
Files.createFile(nf, null);
Files.copy(nf, zos);
} catch (Exception e) {
e.printStackTrace();
}
}
编辑:
当我调试java组件时,看起来一切都会好的。我想知道将临时文件复制到最终文件目的地是否存在一些问题。
答案 0 :(得分:1)
好的,我遇到了问题。
Files.copy(nf, zos);
完全不起作用。所以我尝试使用流:
final byte[] bytes = new byte[1024];
int read = 0;
while ((read = inputStream.read(bytes)) != -1) {
zos.write(bytes, 0, read);
}
zos.close();
哪个也行不通。但有趣的是(和House M.D.明智的:-))我刚遇到一个有类似问题的朋友。 在他的情况下,文件编写者没有输出任何东西 - 或一半。当然很奇怪。但他的问题是,他忘了关闭小溪。
所以我查看了我的代码 - 但那里的一切都很好。但后来我开始尝试有趣的解决方案,只是删除了关闭() - 和它工作!当然很奇怪。而且根本不可预测。但至少我的情况现在已经解决了。有人认为这可能是JAVA中的一个错误吗?也许知道如何正确报告?
答案 1 :(得分:0)
尝试(未经测试):
Path image = ...;
Map<String, String> env = new HashMap<>();
env.put("create", "true");
Path path = Paths.get("countMap.zip");
try (FileSystem fs = FileSystems.newFileSystem(path.toUri(), env)) {
Path nf = fs.getPath("/mario.png");
Files.copy(image , nf );
}