>  기사  >  Java  >  JarOutputStream을 사용하여 JAR 파일을 생성할 때 숨겨진 문제를 피하는 방법은 무엇입니까?

JarOutputStream을 사용하여 JAR 파일을 생성할 때 숨겨진 문제를 피하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-02 10:59:30948검색

How to Avoid Hidden Quirks When Creating JAR Files with JarOutputStream?

JarOutputStream을 사용하여 JAR 파일 생성: 숨겨진 문제 해결

JAROutputStream 유틸리티는 프로그래밍 방식으로 JAR 파일을 생성하는 데 간단해 보이지만 문서화되지 않은 몇 가지 문제가 있습니다. 이는 생성된 아카이브의 무결성을 손상시킬 수 있습니다. 이러한 이상한 점은 다음 세 가지 특정 영역에서 나타납니다.

  • 디렉터리 이름은 JAR 내에서 알려진 디렉터리로 끝나도록 뒤에 /가 필요합니다.
  • 경로 구분 기호는 /로 표시해야 합니다. 플랫폼별로 다릅니다.
  • 항목은 / 슬래시로 시작할 수 없습니다.

JAR 생성이 제대로 이루어지도록 하려면 다음 지침을 따르세요.

<code class="java">public void run() throws IOException {
    Manifest manifest = new Manifest();
    // ... (populate manifest)

    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);
        // ... (set entry properties)

        target.putNextEntry(entry);
        target.closeEntry();

        for (File nestedFile : source.listFiles()) {
            add(nestedFile, target);
        }
    } else {
        JarEntry entry = new JarEntry(name);
        // ... (set entry properties)

        target.putNextEntry(entry);
        try (BufferedInputStream in = new BufferedInputStream(new FileInputStream(source))) {
            // ... (write file to JAR entry)
        }

        target.closeEntry();
    }
}</code>

By 이러한 지침을 준수하면 의도한 대로 추출되고 작동하는 JAR 파일을 정확하게 생성할 수 있습니다.

위 내용은 JarOutputStream을 사용하여 JAR 파일을 생성할 때 숨겨진 문제를 피하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.