2015-03-22 4 views
-2

Я пишу программу, которая должна извлечь zip-файл. У меня есть код, который должен работать, но почему-то бросает java.io.FileNotFoundException.Почему BufferedOutputStream ищет META-INF/MANIFEST.MF?

Вот метод:

private static void unzip() { 
    ZipInputStream input = null; 
    try { 
     input = new ZipInputStream(new BufferedInputStream(new FileInputStream(SERVER_FOLDER + File.separator + "folder" + File.separator + "mods.zip"))); 
    } catch (FileNotFoundException e) { 
     System.err.println("The program has encountered an error and needs to stop.\nPlease notify the program author of this problem."); 
     e.printStackTrace(); 
     System.exit(-1); 
    } 

    ZipEntry entry; 
    final int BUFFER = 8192; 

    System.out.print("Extracting..."); 

    try { 
     byte[] data = new byte[BUFFER]; 
     while ((entry = input.getNextEntry()) != null) { 
      BufferedOutputStream output = new BufferedOutputStream(
        new FileOutputStream(entry.getName()), BUFFER); 
      int count; 
      while ((count = input.read(data, 0, BUFFER)) != -1) { 
       output.write(data, 0, BUFFER); 
      } 
      input.closeEntry(); 
      output.flush(); 
      output.close(); 
     } 
     input.close(); 
    } catch (IOException e) { 
     System.err.println("The installer has encountered an error and needs to stop.\nPlease notify the program author of this problem."); 
     e.printStackTrace(); 
     System.exit(-1); 
    } 
    System.out.println("Done"); 
} 

Это производит следующий вывод на консоль:

java.io.FileNotFoundException: META-INF/MANIFEST.MF (No such file or directory) 
    at java.io.FileOutputStream.open(Native Method) 
    at java.io.FileOutputStream.<init>(FileOutputStream.java:213) 
    at java.io.FileOutputStream.<init>(FileOutputStream.java:101) 
    at me.smithb99.installer.ServerInstaller.unzipMods(ServerInstaller.java:330) 
    at me.smithb99.installer.ServerInstaller.installServer(ServerInstaller.java:84) 
    at me.smithb99.installer.Main.main(Main.java:71) 
+2

Так где '' unzipMods' и installServer'? На самом деле, где 'ServerInstaller'? Предоставленный фрагмент кода, похоже, не связан с ошибкой, которую вы получаете ... – MadProgrammer

+0

Вам нужна подсказка? Посмотрите где-нибудь около 'ServerInstaller' строка 330. – hfontanez

ответ

2

Почему BufferedOutputStream ищет META-INF/MANIFEST.MF?

Это не так. См. Трассировку стека. new FileOutputStream(...) ищет его.

Почему? Поскольку

new FileOutputStream(entry.getName()), BUFFER) 

встреч по этому пути, который возвращается entry.getName().

+0

Файл не существует. Единственными вещами в zip-файле являются JAR-файлы. Если я правильно понимаю, каждый 'ZipEntry' является файлом в zip-архиве. Единственные записи - файлы JAR. Нет папки META-INF. – smithb99