2016-11-09 2 views
-1

Вот мой код, я ищу способ добавить файлы в запущенную банку. Заранее спасибо. Ошибка, которая возникает в настоящее время, - это «недопустимый размер записи (ожидается 62, но получен 0 байтов). 62 байта - это размер моего файла MANIFEST, который записывается. Я не уверен, что это имеет ничего общего.Как добавить файлы в jar

 JarFile replace = new JarFile("newgame.jar"); 
     JarInputStream jis = null; 
     JarOutputStream jos = new JarOutputStream(new FileOutputStream(
       Launcher.class.getProtectionDomain().getCodeSource().getLocation().getPath())); 
     for (Enumeration<JarEntry> list = replace.entries(); list.hasMoreElements();) { 
      JarEntry nextEntry = list.nextElement(); 
      if (!nextEntry.getName().equals("Launcher.class")) { 
       jos.putNextEntry(nextEntry); 
       jis = new JarInputStream(replace.getInputStream(nextEntry)); 
       ByteArrayOutputStream out = new ByteArrayOutputStream(); 
       byte[] byteBuff = new byte[1024]; 
       int bytesRead = 0; 
       while ((bytesRead = jis.read(byteBuff)) != -1) 
        out.write(byteBuff, 0, bytesRead); 
       jos.write(out.toByteArray()); 
       out.close(); 
       jis.close(); 
      } 
     } 
     replace.close(); 
     jos.close(); 
     new File("newgame.jar").delete(); 
+0

Почему вы хотите, чтобы это сделать это, вероятно, [XY Проблема] (Http:.? // xyproblem. info) .Какой оператор в вашем коде сообщает вам об ошибке? –

+0

@JimGarrison the jos.pu tNextEntry (nextEntry); дает мне ошибку. – Toxxic

ответ

0

Фиксированный с

 JarFile replace = new JarFile("newgame.jar"); 
     InputStream is = null; 
     JarOutputStream jos = new JarOutputStream(new FileOutputStream(
       Launcher.class.getProtectionDomain().getCodeSource().getLocation().getPath())); 
     for (Enumeration<JarEntry> list = replace.entries(); list.hasMoreElements();) { 
      JarEntry nextEntry = list.nextElement(); 
      jos.putNextEntry(nextEntry); 
      is = replace.getInputStream(nextEntry); 
      ByteArrayOutputStream out = new ByteArrayOutputStream(); 
      byte[] byteBuff = new byte[(int) nextEntry.getSize()]; 
      int bytesRead = 0; 
      while ((bytesRead = is.read(byteBuff, 0, byteBuff.length)) != -1) 
       out.write(byteBuff, 0, bytesRead); 
      jos.write(out.toByteArray()); 
      out.close(); 
      is.close(); 
     } 
     replace.close(); 
     jos.close(); 
     new File("newgame.jar").delete(); 

Я преобразовал JarInputStreams в InputStreams и по какой-то причине это работало

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