Как может я zip-файлы в Java и не включать пути файлов

Например, я хочу архивировать файл, хранивший в /Users/me/Desktop/image.jpg

Я сделал этот метод:

public static Boolean generateZipFile(ArrayList<String> sourcesFilenames, String destinationDir, String zipFilename){
  // Create a buffer for reading the files 
  byte[] buf = new byte[1024]; 

  try {
   // VER SI HAY QUE CREAR EL ROOT PATH
         boolean result = (new File(destinationDir)).mkdirs();

         String zipFullFilename = destinationDir + "/" + zipFilename ;

         System.out.println(result);

   // Create the ZIP file  
   ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFullFilename)); 
   // Compress the files 
   for (String filename: sourcesFilenames) { 
    FileInputStream in = new FileInputStream(filename); 
    // Add ZIP entry to output stream. 
    out.putNextEntry(new ZipEntry(filename)); 
    // Transfer bytes from the file to the ZIP file 
    int len; 
    while ((len = in.read(buf)) > 0) { 
     out.write(buf, 0, len); 
    } 
    // Complete the entry 
    out.closeEntry(); 
    in.close(); 
   } // Complete the ZIP file 
   out.close();

   return true;
  } catch (IOException e) { 
   return false;
  }  
 }

Но когда я извлекаю файл, разархивированные файлы имеют полный путь.

Я не хочу полного пути каждого файла в zip, я только хочу имя файла.

Как может, я сделал это?

19
задан OscarRyz 10 June 2010 в 22:41
поделиться

4 ответа

Здесь:

// Add ZIP entry to output stream. 
out.putNextEntry(new ZipEntry(filename)); 

Вы создаете запись для этого файла, используя полный путь. Если вы просто используете имя (без пути), у вас будет то, что вам нужно:

// Add ZIP entry to output stream. 
File file = new File(filename); //"Users/you/image.jpg"
out.putNextEntry(new ZipEntry(file.getName())); //"image.jpg"
32
ответ дан 30 November 2019 в 03:43
поделиться

Вы находите свои исходные данные, используя относительный путь к файлу, а затем устанавливаете то же самое для Entry. Вместо этого вы должны превратить источник в объект File, а затем использовать

putNextEntry (new ZipEntry (sourceFile.getName ()))

, который даст вам только последнюю часть пути (т.е. фактический файл имя)

2
ответ дан 30 November 2019 в 03:43
поделиться

Вы, вероятно, могли уйти с доступом к исходным файлам через новый FileInputStream (новый файл (sourceFilePath, sourceFileName)).

0
ответ дан 30 November 2019 в 03:43
поделиться

Выполните , как сказал Джейсон , или, если вы хотите сохранить подпись метода, сделайте это следующим образом:

out.putNextEntry(new ZipEntry(new File(filename).getName())); 

или, используя FileNameUtils.getName из Apache Commons / io:

out.putNextEntry(new ZipEntry(FileNameUtils.getName(filename))); 
1
ответ дан 30 November 2019 в 03:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: