首頁 > Java > java教程 > 使用 Java 的 JarOutputStream 建立 JAR 檔案時如何避免意外問題?

使用 Java 的 JarOutputStream 建立 JAR 檔案時如何避免意外問題?

Mary-Kate Olsen
發布: 2024-10-29 11:23:02
原創
918 人瀏覽過

How to Avoid Unexpected Issues While Creating JAR Files with Java's JarOutputStream?

對JAR 檔案建立的JarOutputStream 進行故障排除

使用java.util.jar.JarOutputStream 以程式設計方式建立JAR 檔案看起來很簡單,但某些細微差別可能會導致意外問題。本文探討了這些未記錄的怪癖,並提供了用於建立有效 JAR 檔案的全面解決方案。

了解怪癖

使用 JarOutputStream 時,遵守以下未記錄的規則至關重要:

  • 目錄名稱必須以「/」結尾斜線。
  • 路徑應使用“/”斜杠,而不是“”。
  • 條目不能以「/」斜線開頭。

實現正確的方法

這是如何使用清單檔案建立JAR 檔案的詳細範例,解決了上述問題怪癖:

<code class="java">public void run() throws IOException {
    // Prepare the manifest file
    Manifest manifest = new Manifest();
    manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0");

    // Create a new JAROutputStream with the manifest
    JarOutputStream target = new JarOutputStream(new FileOutputStream("output.jar"), manifest);

    // Iterate over the source directory and add files to the JAR
    add(new File("inputDirectory"), target);

    // Close the JAROutputStream
    target.close();
}

private void add(File source, JarOutputStream target) throws IOException {
    // Prepare the entry path
    String name = source.getPath().replace("\", "/");

    // Handle directories
    if (source.isDirectory()) {
        if (!name.endsWith("/")) {
            name += "/";
        }
        // Create a directory entry with appropriate timestamps
        JarEntry entry = new JarEntry(name);
        entry.setTime(source.lastModified());
        target.putNextEntry(entry);
        target.closeEntry();

        // Recursively add files within the directory
        for (File nestedFile : source.listFiles()) {
            add(nestedFile, target);
        }
    } 
    // Handle files
    else {
        // Create a file entry with appropriate timestamps
        JarEntry entry = new JarEntry(name);
        entry.setTime(source.lastModified());
        target.putNextEntry(entry);

        // Read and write the file contents to the JAR
        try (BufferedInputStream in = new BufferedInputStream(new FileInputStream(source))) {
            byte[] buffer = new byte[1024];
            while (true) {
                int count = in.read(buffer);
                if (count == -1)
                    break;
                target.write(buffer, 0, count);
            }
            target.closeEntry();
        }
    }
}</code>
登入後複製

透過遵循這些準則,您現在可以自信地以程式設計方式建立有效的JAR 文件,確保可以按預期存取其中包含的庫和其他資源。

以上是使用 Java 的 JarOutputStream 建立 JAR 檔案時如何避免意外問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板