2014-09-09 7 views
3

Как я могу создать tar каталог и сохранить структуру каталогов с помощью библиотек org.apache.commons.compress?Тар структура сохранения каталога с помощью Apache в java

С тем, что я делаю ниже, я просто получаю пакет, который имеет все сплющенные.

Спасибо!


Вот что я пытался и не работает.

public static void createTar(final String tarName, final List<File> pathEntries) throws IOException { 
    OutputStream tarOutput = new FileOutputStream(new File(tarName)); 

    ArchiveOutputStream tarArchive = new TarArchiveOutputStream(tarOutput); 

    List<File> files = new ArrayList<File>(); 

    for (File file : pathEntries) { 
     files.addAll(recurseDirectory(file)); 
    } 

    for (File file : files) { 

     TarArchiveEntry tarArchiveEntry = new TarArchiveEntry(file, file.getName()); 
     tarArchiveEntry.setSize(file.length()); 
     tarArchive.putArchiveEntry(tarArchiveEntry); 
     FileInputStream fileInputStream = new FileInputStream(file); 
     IOUtils.copy(fileInputStream, tarArchive); 
     fileInputStream.close(); 
     tarArchive.closeArchiveEntry(); 
    } 

    tarArchive.finish(); 
    tarOutput.close(); 
} 

public static List<File> recurseDirectory(final File directory) { 

    List<File> files = new ArrayList<File>(); 

    if (directory != null && directory.isDirectory()) { 

     for (File file : directory.listFiles()) { 

      if (file.isDirectory()) { 
       files.addAll(recurseDirectory(file)); 
      } else { 
       files.add(file); 
      } 
     } 
    } 

    return files; 
} 

ответ

2

Ваша проблема здесь:

TarArchiveEntry tarArchiveEntry = new TarArchiveEntry(file, file.getName()); 

Поскольку вы поместите каждый файл с только его имя, а не его путь, в смоле.

Вам необходимо передать относительный путь из ваших записей в этот файл вместо file.getName().

+0

Ничего себе, спасибо. Не заметил этого. – prolink007