Путь к файлу в Zip-файле - PullRequest
       1

Путь к файлу в Zip-файле

0 голосов
/ 21 октября 2010

У меня есть Java-программа, как показано ниже, для архивирования папки в целом.

public static void zipDir(String dir2zip, ZipOutputStream zos) 

{ 

try 

{ 

           File zipDir= new File(dir2zip); 

            String[] dirList = zipDir.list(); 

          byte[] readBuffer = new byte[2156]; 

          int bytesIn = 0; 

      for(int i=0; i<dirList.length; i++) 

       { 

         File f = new File(zipDir, dirList[i]); 

      if(f.isDirectory()) 

      { 

                    String filePath = f.getPath(); 

           zipDir(filePath, zos); 

         continue; 

     } 

          FileInputStream fis = new FileInputStream(f); 

            ZipEntry anEntry = new ZipEntry(f.getPath()); 

                zos.putNextEntry(anEntry); 

       while((bytesIn = fis.read(readBuffer)) != -1) 

       { 

           zos.write(readBuffer, 0, bytesIn); 

        } 

      fis.close(); 

    } 

} 

catch(Exception e) 

{ 

 e.printStackTrace();

} 


}

public static void main(){
String date=new java.text.SimpleDateFormat("MM-dd-yyyy").format(new java.util.Date());

         ZipOutputStream zos = new ZipOutputStream(new FileOutputStream("Output/" + date + "_RB" + ".zip"));

         zipDir("Output/" + date + "_RB", zos); 

         zos.close();
}

Мой запрос здесь.Целевая папка (+ date + _RB) для архивации находится внутри папки с именем Output.После успешного архивирования, когда я извлекаю заархивированный файл, я нахожу папку «Вывод», внутри которой находится (+ date + _RB) необходимая папка.Мне не нужна эта папка Output после распаковки zip-файла, скорее она должна напрямую извлекать только нужную папку.Пожалуйста, посоветуйте то же самое.

ОБНОВЛЕНИЕ:

Я попробовал ответ Исаака.При извлечении результирующего zip-файла папки не извлекаются.Извлекаются только файлы внутри всех папок.Мне просто не нужна папка «Вывод» одна в результирующем zip-файле.Но программа не извлекает все остальные папки из папки «Вывод», а просто извлекает файлы из этих папок.Пожалуйста, посоветуйте, как поступить ...

1 Ответ

2 голосов
/ 21 октября 2010

Это происходит из-за этого:

ZipEntry anEntry = new ZipEntry (f.getPath ());

f.getPath() вернет Output/ в начале строки. Это связано с потоком вашей программы и тем, как она (неправильно) использует объекты File.

Я предлагаю вам создать объект File с именем, скажем, tmp:

File tmp = new File(dirList[i]);

Изменение конструкции f:

File f = new File(zipDir, tmp.getPath());

Затем измените это:

ZipEntry anEntry = new ZipEntry(f.getPath());

На это:

ZipEntry anEntry = new ZipEntry(tmp.getPath());

У меня не было времени на его тестирование, но, в двух словах, ваша проблема связана с тем, как создается объект File.

...