Duvida - Zipando arquivo

2 respostas
A

Galera,

Eu to com uma classe que zipa um arquivo txt.

Ele esta zipando tudo certinho, so que… O arquivo zip, ele coloca as sub-pastas tbm.

Vou colocar minha classe aqui para voces darem uma olhada e entenderem melhor:

public class Zipando {

	// tamanho de leitura maximo
	static final int TAM_BUFFER = 1024;
	public static String saida = "";

	public static void zipa(String outFileZip, String inFileZip, int escolheu) {

		int i, cont;

		try {

			File f = null;

			FileInputStream fileinput = null;
			FileOutputStream fileoutput = null;
			BufferedInputStream buffer = null;
			ZipOutputStream zipar = null;
			ZipEntry entry = null;
			byte[] dados = new byte[TAM_BUFFER];

			fileoutput = new FileOutputStream(outFileZip);

			zipar = new ZipOutputStream(new BufferedOutputStream(fileoutput));

			// arquivo
			if (escolheu == 1) {

				f = new File(inFileZip); // nome arquivo digitado

				if (f.isFile() && !(f.getName()).equals(fileoutput)) {
					System.out.println("Compactando: " + f);

					fileinput = new FileInputStream(f);
					buffer = new BufferedInputStream(fileinput, TAM_BUFFER);
					entry = new ZipEntry(inFileZip);
					zipar.putNextEntry(entry);

					while ((cont = buffer.read(dados, 0, TAM_BUFFER)) != -1) {
						zipar.write(dados, 0, cont);
					}// while
					buffer.close();

				}// if

				zipar.close();

			} else

			// pasta
			if (escolheu == 2) {
				System.out.print("\n");
				String[] arquivos;

				f = new File("."); // todos os arquivos da pasta atual
				arquivos = f.list();

				for (i = 0; i < (arquivos.length - 1); i++) {
					File arquivo = new File(arquivos[i]);

					if (arquivo.isFile()
							&& !(arquivo.getName()).equals(fileoutput)) {
						System.out.println("Compactando: " + arquivos[i]);

						fileinput = new FileInputStream(arquivo);
						buffer = new BufferedInputStream(fileinput, TAM_BUFFER);
						entry = new ZipEntry(arquivos[i]);
						zipar.putNextEntry(entry);

						while ((cont = buffer.read(dados, 0, TAM_BUFFER)) != -1) {
							zipar.write(dados, 0, cont);
						}
						buffer.close();
					}
				}
				
				zipar.close();

			}// if 2

		}

		catch (FileNotFoundException mensagem) {
			System.out.println("\nArquivo nao encontrado!");
			System.out
					.println("Caso o arquivo esteja em outro diretorio, favor digitar o caminho completo.\n\n");
		} catch (IOException e) {
			System.out.println("Erro na entrada de dados " + e.toString());
		} catch (Exception e) {
			e.printStackTrace();
		}//

	}// metodo para zipar

	public static void main(String argumento[]) {

		zipa("c:\\temp\\arquivo.zip", "c:\\temp\\arquivo.txt", 1);
		System.out.print("\nArquivo zipado com sucesso!\n\n");

	}

}

Testem ai pra voces verem como o arquivo zip ta saindo…
dentro do Zip sai assim:
temp/arquivo.txt

Nao tem como, quando eu abrir o arquivo ZIP, aparecer direto o TXT, sem ele estar nas subpastas??

Abracos

Alvaro

2 Respostas

R

Acho que você terá de modificar o parâmetro passado ao construtor de ZipEntry. Em vez do trecho abaixo:

entry = new ZipEntry(inFileZip);

Use o seguinte:

entry = new ZipEntry(f.getName());

E em vez do trecho abaixo:

entry = new ZipEntry(arquivos[i]);

Use o seguinte:

entry = new ZipEntry(arquivo.getName());
A

Resolvido Roger… Valeu cara!

Criado 20 de janeiro de 2010
Ultima resposta 20 de jan. de 2010
Respostas 2
Participantes 2