Rumah  >  Artikel  >  Java  >  Bagaimana untuk Mengelakkan Kebiasaan Tanpa Dokumen Apabila Menggunakan JarOutputStream untuk Mencipta Fail JAR?

Bagaimana untuk Mengelakkan Kebiasaan Tanpa Dokumen Apabila Menggunakan JarOutputStream untuk Mencipta Fail JAR?

Susan Sarandon
Susan Sarandonasal
2024-10-30 08:00:27207semak imbas

How to Avoid Undocumented Quirks When Using JarOutputStream to Create JAR Files?

Mencipta Fail JAR Menggunakan JarOutputStream

Untuk menjana fail JAR secara pengaturcaraan, JarOutputStream sering digunakan. Walau bagaimanapun, adalah penting untuk mengelakkan kebiasaan tertentu yang tidak didokumenkan dalam JarOutputStream:

1. Direktori Berakhir dengan Tanda Slash:

Nama direktori dalam fail JAR mesti berakhir dengan garis miring '/'.

2. Laluan yang menggunakan garis miring ke hadapan:

Gunakan garis miring ke hadapan '/' dalam laluan, berbanding dengan garis miring ke belakang ''.

3. Tiada Tanda Slash Utama dalam Nama Kemasukan:

Nama entri tidak boleh bermula dengan garis miring '/'.

Kod Contoh dengan Pembetulan:

Kod diperbetulkan berikut membina fail JAR yang sah dengan fail manifes:

<code class="java">public void run() throws IOException {
    Manifest manifest = new Manifest();
    manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0");
    JarOutputStream target = new JarOutputStream(new FileOutputStream("output.jar"), manifest);
    add(new File("inputDirectory"), target);
    target.close();
}

private void add(File source, JarOutputStream target) throws IOException {
    String name = source.getPath().replace("\", "/");
    if (source.isDirectory()) {
        if (!name.endsWith("/")) {
            name += "/";
        }
        JarEntry entry = new JarEntry(name);
        entry.setTime(source.lastModified());
        target.putNextEntry(entry);
        target.closeEntry();
        for (File nestedFile : source.listFiles()) {
            add(nestedFile, target);
        }
    } else {
        JarEntry entry = new JarEntry(name);
        entry.setTime(source.lastModified());
        target.putNextEntry(entry);
        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>

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Kebiasaan Tanpa Dokumen Apabila Menggunakan JarOutputStream untuk Mencipta Fail JAR?. 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