Создание файла JAR программно - PullRequest
2 голосов
/ 11 ноября 2009

Я создал файл JAR из своего кода Java:

public void create() throws IOException{
     FileOutputStream stream = new FileOutputStream(this.packagePath);
     JarOutputStream out = new JarOutputStream(stream, new Manifest());
     out.close();
     //jarFile = new JarFile(new File(this.packagePath));
}

Я получаю каталог META-INF с файлом MANIFEST.MF внутри.

Теперь, когда я хочу добавить файл в файл jar:

public void addFile(File file) throws IOException{

    //first, make sure the package already exists
    if(!file.exists()){
        throw new IOException("Make" +
                " sure the package file already exists.you might need to call the Package.create() " +
                "method first.");
    }

    FileOutputStream stream = new FileOutputStream(this.packagePath);
    JarOutputStream out = new JarOutputStream(stream);
    /*if(jarFile.getManifest()!=null){
        out = new JarOutputStream(stream,jarFile.getManifest());
    }else{
        out=new JarOutputStream(stream);
    }*/

    byte buffer[] = new byte[BUFFER_SIZE];     
    JarEntry jarEntry = new JarEntry(file.getName());
    jarEntry.setTime(file.lastModified());
    out.putNextEntry(jarEntry);

    //Write file to archive
    FileInputStream in = new FileInputStream(file);

    while (true) {
      int nRead = in.read(buffer, 0, buffer.length);
      if (nRead <= 0)
        break;
      out.write(buffer, 0, nRead);
    }
    in.close();     
    out.close();
}

при добавлении файла в архив JAR с использованием приведенного выше кода, каталог META-INF с его MANIFEST.MF исчезает, и я получаю новый добавленный файл.

Я хочу иметь возможность добавить файл в банку и получить файл манифеста. внутри файла манифеста я хочу строку с именем только что добавленного jar.

Спасибо.

Ответы [ 3 ]

3 голосов
/ 11 ноября 2009
  1. включите ant.jar в classpath вашего проекта
  2. код
    Jar jar = new Jar();
    //configure the jar object
    jar.execute();

Смотрите здесь для получения информации о параметрах, которые вы можете установить.

1 голос
/ 11 ноября 2009

Я думаю, что вы не можете добавить новую запись, потому что вы не можете открыть пакет jar для "append". Я думаю, что вы должны создать новый файл JAR и копировать записи из старых, и добавить свои записи.

0 голосов
/ 11 ноября 2009
FileOutputStream stream = new FileOutputStream(this.packagePath);

Эта строка создаст новый пустой файл.

Чтобы отредактировать файл JAR, вам нужно будет сделать резервную копию старой версии и скопировать ее записи в новый файл JAR.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...