代码之家  ›  专栏  ›  技术社区  ›  Adam

如何使用java.util.zip对java中的字符串进行存档/解压缩,以便在Google Earth中使用?

  •  3
  • Adam  · 技术社区  · 14 年前

    用例

    问题

    使用下面的实现,我收到来自WinZip和googleearth的错误,即存档已损坏或文件无法分别打开。与我构建此模型的其他示例不同的部分是添加字符串的行:

    ZipEntry kmlZipEntry = new ZipEntry("doc.kml");
    out.putNextEntry(kmlZipEntry);
    out.write(kml.getBytes("UTF-8"));
    

    请给我指出正确的方向,以便正确地写这个字符串,使它处于正确的位置 doc.xml 在生成的kmz文件中。我知道如何将字符串写入临时文件,但为了便于理解和提高效率,我非常希望将该操作保留在内存中。

        private static final int BUFFER = 2048;
        private static void kmz(OutputStream os, String kml)
        {
            try{
                BufferedInputStream origin = null;
                ZipOutputStream out = new ZipOutputStream(os);
                out.setMethod(ZipOutputStream.DEFLATED);
                byte data[] = new byte[BUFFER];
                File f = new File("./icons"); //folder containing icons and such
                String files[] = f.list();
    
                if(files != null)
                {
                    for (String file: files) {
                        LOGGER.info("Adding to KMZ: "+ file);
                        FileInputStream fi = new FileInputStream(file);
                        origin = new BufferedInputStream(fi, BUFFER);
                        ZipEntry entry = new ZipEntry(file);
                        out.putNextEntry(entry);
                        int count;
                        while((count = origin.read(data, 0, BUFFER)) != -1) {
                            out.write(data, 0, count);
                        }
                        origin.close();
                    }
                }
                ZipEntry kmlZipEntry = new ZipEntry("doc.kml");
                out.putNextEntry(kmlZipEntry);
                out.write(kml.getBytes("UTF-8"));
            }
            catch(Exception e)
            {
                LOGGER.error("Problem creating kmz file", e);
            }
        }
    

    给我演示如何放置 icons 将文件夹放入存档中类似的文件夹中,而不是与 doc.kml .

    更新 即使将字符串保存到临时文件中,也会出现错误。啊。

    用例注释 how-to-access-local-files-on-server-in-jboss-application

    1 回复  |  直到 7 年前
        1
  •  4
  •   BalusC    14 年前

    close() ZipOutputStream finally try 阻止创建它的位置。


    更新

    ZipEntry entry = new ZipEntry("icons/" + file);