使用FileSystem输出到zip文件的java图像为空

时间:2014-02-21 17:44:16

标签: java io zip java-7

我目前正在尝试将图像文件复制到现有的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组件时,看起来一切都会好的。我想知道将临时文件复制到最终文件目的地是否存在一些问题。

2 个答案:

答案 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 );
 }