Rumah >Java >javaTutorial >Bagaimana untuk Mengelakkan Isu Tidak Dijangka Semasa Mencipta Fail JAR dengan JarOutputStream Java?

Bagaimana untuk Mengelakkan Isu Tidak Dijangka Semasa Mencipta Fail JAR dengan JarOutputStream Java?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-29 11:23:02929semak imbas

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

Menyelesaikan masalah JarOutputStream untuk Penciptaan Fail JAR

Mencipta fail JAR secara pengaturcaraan menggunakan java.util.jar.JarOutputStream boleh kelihatan mudah, tetapi nuansa tertentu boleh membawa kepada isu yang tidak dijangka. Artikel ini meneroka kebiasaan tidak berdokumen ini dan menyediakan penyelesaian komprehensif untuk mencipta fail JAR yang sah.

Memahami Keanehan

Apabila menggunakan JarOutputStream, adalah penting untuk mematuhi peraturan tidak berdokumen berikut:

  • Nama direktori mesti ditamatkan dengan garis miring '/'.
  • Laluan harus menggunakan garis miring '/', bukan ''.
  • Entri tidak boleh dimulakan dengan garis miring '/'.

Melaksanakan Pendekatan yang Betul

Berikut ialah contoh terperinci tentang cara mencipta fail JAR dengan fail manifes, menangani kebiasaan yang disebutkan di atas:

<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>

Oleh mengikut garis panduan ini, anda kini boleh membuat fail JAR yang sah dengan penuh yakin secara pengaturcaraan, memastikan perpustakaan dan sumber lain yang disertakan di dalamnya boleh diakses seperti yang dimaksudkan.

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Isu Tidak Dijangka Semasa Mencipta Fail JAR dengan JarOutputStream Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn