2016-03-22 3 views
2

Решено, см. Мое сообщение нижеJava: Как скопировать папку из одной банки в другую?

Я хочу скопировать файлы из одного .jar в другой с помощью java. Но не все файлы в банке должны быть скопированы. Мне нужно только скопировать одну конкретную папку, которая также может содержать подпапки. У меня уже есть код для копирования файлов из одного кувшина в другой:

public static void copyFiles(final File file) throws IOException { 

    final JarFile targetJar = new JarFile(file); 
    final JarOutputStream output = new JarOutputStream(new FileOutputStream(file)); 

    final JarFile localJar = new JarFile(new File(JarEditor.class.getProtectionDomain().getCodeSource().getLocation().getFile())); 

    // WRAPPER_CONTENT is a String[] which contains all names of the files i want to copy 
    for (final String entryName : StringResource.WRAPPER_CONTENT) { 
     final JarEntry entryToCopy = localJar.getJarEntry(entryName); 
     final JarEntry targetEntry = new JarEntry(entryName); 

     output.putNextEntry(targetEntry); 

     final InputStream input = localJar.getInputStream(entryToCopy); 
     final byte[] buffer = new byte[10240]; 
     int readByte = 0; 
     while ((readByte = input.read(buffer)) >= 0) { 
      output.write(buffer, 0, readByte); 
     } 
    } 

    output.flush(); 
    output.close(); 

    localJar.close(); 
    targetJar.close(); 
} 

В настоящее время им копирование файлов, запустив через закодированный список их имена. Но id предпочитает более гибкий способ, чтобы я мог добавлять и удалять ресурсы из своей банки, и это все равно будет работать. Все они имеют одну и ту же родительскую папку в банке. Итак, как мне пройти через эту одну папку и только скопировать эти файлы?

Также, возможно, стоит упомянуть, все файлы, которые должны быть скопированы, расположены в jarfile, из-за которого я запускаюсь, поскольку вы, вероятно, получили от моего кода.

Спасибо за помощь
Baschdi

ответ

0

Неудача я думаю. Я искал решение какое-то время, и только когда я создаю этот поток, мне удается найти решение. Я просто проверяю, начинается ли имя jarentry с именем папки, которую я хочу скопировать. Если это так, я использую то же самое, что и выше, чтобы скопировать jarentry в другую банку. Разрешено

Смежные вопросы