标签:
I am using java.util.zip to add some configuration resources into a jar file. when I call addFileToZip() method it overwrites the jar completely, instead of adding the file to the jar. Why I need to write the config to the jar is completely irrelevant. and I do not wish to use any external API‘s.
EDIT: The jar is not running in the VM and org.cfg.resource is the package I‘m trying to save the file to, the file is a standard text document and the jar being edited contains the proper information before this method is used.
My code:
public void addFileToZip(File fileToAdd, File zipFile) { ZipOutputStream zos = null; FileInputStream fis = null; ZipEntry ze = null; byte[] buffer = null; int len; try { zos = new ZipOutputStream(new FileOutputStream(zipFile)); } catch (FileNotFoundException e) { } ze = new ZipEntry("org" + File.separator + "cfg" + File.separator + "resource" + File.separator + fileToAdd.getName()); try { zos.putNextEntry(ze); fis = new FileInputStream(fileToAdd); buffer = new byte[(int) fileToAdd.length()]; while((len = fis.read(buffer)) > 0) { zos.write(buffer, 0, len); } } catch (IOException e) { } try { zos.flush(); zos.close(); fis.close(); } catch (IOException e) { } }
The code you showed overrides a file no matter if it would be a zip file or not. ZipOutputStream
does not care about existing data. Neither any stream oriented API does.
I would recommend
Create new file using ZipOutputStream
.
Open existing with ZipInputStream
Copy existing entries to new file.
Add new entries.
Replace old file with a new one.
Hopefully in Java 7 we got Zip File System that will save you a lot of work.
We can directly write to files inside zip files
Map<String, String> env = new HashMap<>(); env.put("create", "true"); Path path = Paths.get("test.zip"); URI uri = URI.create("jar:" + path.toUri()); try (FileSystem fs = FileSystems.newFileSystem(uri, env)) { Path nf = fs.getPath("new.txt"); try (Writer writer = Files.newBufferedWriter(nf, StandardCharsets.UTF_8, StandardOpenOption.CREATE)) { writer.write("hello"); } }
http://stackoverflow.com/questions/17500856/java-util-zip-adding-a-new-file-overwrites-entire-jar?lq=1
Java.util.zip adding a new file overwrites entire jar?(转)
标签:
原文地址:http://www.cnblogs.com/softidea/p/4272451.html