Será correcto este método de conversão?

0 respostas
casconi

Estou a modificar ficheiros odt da seguinte maneira.

Faço unzip do ficheiro, edito os xml e volto a fazer zip de tudo ficando com a extensão odt.
Mesmo as pastas que tem de ficar vazias, continuam vazias mesmo quando volto a fazer zip.

Problema:
Quando corro o ficheiro ele diz que está corrupto, abre na mesma só que não mostra imagens, mas toda formatação que faça ao texto mantem-se.

Se fizer so unzip e zip de novo, “teoricamente” devia ficar correcto, mas não, dá exactamente o mesmo problema.

Este é o código que tenho de unzip e zip, caso seja problema de código

private static final void zip(File directoria, File base,
			ZipOutputStream zos) throws IOException {
		File[] files = directoria.listFiles();
		byte[] buffer = new byte[10240];
		int read;
		for (int i = 0, n = files.length; i < n; i++) {
			if (files[i].isDirectory()) {
				if (files[i].listFiles().length == 0) {
					zos.putNextEntry(new ZipEntry(files[i].getPath().substring(
							base.getPath().length() + 1)
							+ System.getProperty("file.separator")));
					zos.write(new byte[0], 0, 0);
				}
				zip(files[i], base, zos);
			} else {
				FileInputStream in = new FileInputStream(files[i]);
				ZipEntry entry = new ZipEntry(files[i].getPath().substring(
						base.getPath().length() + 1));
				zos.putNextEntry(entry);
				while ((read = in.read(buffer)) != -1) {
					zos.write(buffer, 0, read);
				}
				in.close();
			}
		}
	}

	public static final void unzip(File zip, File extrairPara) throws IOException {
		ZipFile archive = new ZipFile(zip);
		Enumeration e = archive.entries();
		while (e.hasMoreElements()) {
			ZipEntry entry = (ZipEntry) e.nextElement();
			File file = new File(extrairPara, entry.getName());
			if (entry.isDirectory() && !file.exists()) {
				file.mkdirs();
			} else {
				if (!file.getParentFile().exists()) {
					file.getParentFile().mkdirs();
				}

				InputStream in = archive.getInputStream(entry);
				BufferedOutputStream out = new BufferedOutputStream(
						new FileOutputStream(file));

				byte[] buffer = new byte[(new ByteArray(zip)).read()];// 
				int read;

				while (-1 != (read = in.read(buffer))) {
					out.write(buffer, 0, read);
				}

				in.close();
				out.close();
			}
		}
	}
Criado 2 de fevereiro de 2009
Respostas 0
Participantes 1