0

首先,我没有看到任何其他问题可以“直接”帮助我解决问题,这就是我决定创建一个新问题的原因。

以下代码被编程为解压缩多个文件和文件夹。

try {
    BufferedOutputStream dest = null;
    FileInputStream fis = new FileInputStream(file);
    CheckedInputStream checksum = new CheckedInputStream(fis, new Adler32());
    ZipInputStream zis = new ZipInputStream(new BufferedInputStream(checksum));
    ZipEntry entry;
    while ((entry = zis.getNextEntry()) != null) {
        if (!entry.isDirectory()) {
            String rutaarchivo = entry.getName();
            int index= rutaarchivo.lastIndexOf('/');
            rutaarchivo=rutaarchivo.substring(index+1);

            estado.setText("Estado: Copiando archivos nuevos: " + entry);
            setProgress(60);
            int zipCounter = 0;
            int count;
            int BUFFER = 2048;
            byte datazip[] = new byte[BUFFER];
            FileOutputStream fos = new FileOutputStream(rutaarchivo);
            dest = new BufferedOutputStream(fos, BUFFER);
            while ((count = zis.read(datazip, 0, BUFFER)) != -1) {
                dest.write(datazip, 0, count);
                zipCounter += count;
                progreso.setValue(zipCounter);
            }
            dest.flush();

            dest.close();
        }
    }
    zis.close();
} catch (Exception e) {
    e.printStackTrace();
    PrintStream outprint = new PrintStream(new FileOutputStream("output.txt"));
    System.setOut(outprint);
} catch (MalformedURLException ex) {
    ex.printStackTrace();
    PrintStream outprint = new PrintStream(new FileOutputStream("output.txt"));
    System.setOut(outprint);
} catch (IOException ioe) {
    ioe.printStackTrace();
    PrintStream outprint = new PrintStream(new FileOutputStream("output.txt"));
    System.setOut(outprint);
}

这段代码工作正常,但有一个重要错误:它解压缩文件夹,而不是像这样显示它们:

  • 文件1.txt
  • 文件2.txt
  • 文件 3.txt
  • 文件夹/file4.txt
  • 文件夹/file5.txt
  • 文件夹/file6.txt

它显示了这一点:

  • 文件1.txt
  • 文件2.txt
  • 文件 3.txt
  • 文件4.txt
  • 文件5.txt
  • 文件6.txt

我究竟做错了什么?

4

1 回答 1

0

您正在将文件名设置为FileOutputStream文件名。

String rutaarchivo = entry.getName();
int index= rutaarchivo.lastIndexOf('/');  // removes directory path
rutaarchivo=rutaarchivo.substring(index+1); // removes directory path
...
FileOutputStream fos = new FileOutputStream(rutaarchivo);

这是一个坏主意。您应该创建自己的基本文件路径并将文件名附加到该路径。

于 2013-10-03T21:11:14.750 回答