Java의jar 파일에서 데이터를 읽는 방법

5523 단어 Javajar
본고는 자바의jar 파일에서 데이터를 읽는 방법을 실례로 기술하였다.여러분에게 참고할 수 있도록 나누어 드리겠습니다.구체적으로 다음과 같습니다.
자바 아카이브(Java Archive, JAR) 파일은 자바 기술을 기반으로 한 패키지 방안입니다.그것들은 개발자가 모든 관련 내용 (.class, 그림, 소리, 지원 파일 등) 을 하나의 단일한 파일로 포장할 수 있도록 허용한다.JAR 파일 형식은 압축, 인증 및 버전 및 기타 다양한 기능을 지원합니다.
JAR 파일에 포함된 파일 내용을 얻는 것은 까다로운 일이지만 불가능한 것은 아니다.이 기교는 JAR 파일에서 파일을 얻는 방법을 알려줄 것이다.이 JAR 파일의 파일 디렉터리를 가져와서 지정한 파일을 읽습니다.
만약 당신이 흔히 볼 수 있는 ZIP 형식에 익숙하다면, JAR 파일과 그것의 차이가 크지 않다는 것을 발견할 수 있을 것이다.JAR 파일은 여러 개의 파일을 한 파일에 묶는 방법을 제공하며, 묶인 모든 파일은 각각 압축할 수 있다.JAR 파일은 개발자가 내용과 관련된 다른 정보를 추가할 수 있도록 manifest라고 불리는 것을 추가할 수 있습니다.예를 들어 manifest는 JAR 파일 중 어느 파일이 프로그램을 실행하기 시작하는지 가리키거나 이 라이브러리의 버전을 지정할 수 있습니다.
Java2 SDK 표준판은 컨트롤러 아래에서 JAR 파일을 읽고 쓸 수 있는jar 도구를 제공합니다.그리고 어떤 때는 프로그램에서 JAR 파일을 읽고 쓰려고 할지도 모른다.(이 기술은 프로그램에서 JAR 파일을 읽는 내용만 다루고 있습니다.)네가 할 수 있어서 매우 기쁘다. 그리고 압력 해제 문제를 고려할 필요가 없다. 왜냐하면 라이브러리가 이미 너를 도와 처리했기 때문이다.네가 써야 할 종류는 모두java에 있다.util.jar 가방 중입니다.여기서 사용할 주요 클래스는 JarFile 클래스입니다. 이것은 하나입니다.jar 파일 자체의 인용입니다.각 파일은 JarEntry에서 참조합니다.
지금부터 매개 변수를 JarFile에 전달하는 구조 함수에 JarFile 실례를 만듭니다. 이 매개 변수는 String일 수도 있고 File일 수도 있습니다.jar 파일의 위치:
JarFile jarFile = new JarFile("thefile.jar");
혹은
File file = new File("thefile.jar");
JarFile jarFile = new JarFile(file);
신분 검증과 태그 파일을 삭제하기 위한 구조 함수도 있습니다.그러나 여기에는 이런 구조 함수와 관련이 없을 것이다.
JAR 파일의 인용을 얻으면 그 내용의 디렉터리를 읽을 수 있습니다.JarFile의 entries 방법은 모든 항목의 Enumeration 대상을 되돌려줍니다. manifest 파일에서 속성, 인증 정보, 그리고 항목의 이름과 크기와 같은 다른 정보를 얻을 수 있습니다.

//  :enum   Java 5.0  ,  5.0  
//   Java 5.0  ,  enum  
//  , 
Enumeration enum = jarFile.entries();
while (enum.hasMoreElements()) {
  process(enum.nextElement());
}

이전에 언급한 바와 같이 모든 개체는 JarEntry이다.이 클래스에는 getName, getSize, getCompressedSize 같은 방법이 있습니다.
프로그램에서 이러한 특성을 어떻게 사용하는지 예를 들어 설명합시다.다음 프로그램은 JAR 파일의 내용 목록과 각 항목의 이름, 크기 및 압축된 크기를 표시합니다.("t"와 "v"파라미터가 있는jar 명령을 사용하는 것과 유사합니다.)

import java.io.*;
import java.util.*;
import java.util.jar.*;
public class JarDir {
  public static void main (String args[]) 
    throws IOException {
    if (args.length != 1) {
      System.out.println("Please provide a JAR filename");
      System.exit(-1);
    }
    JarFile jarFile = new JarFile(args[0]);
    Enumeration enum = jarFile.entries();
    while (enum.hasMoreElements()) {
      process(enum.nextElement());
    }
  }
  private static void process(Object obj) {
    JarEntry entry = (JarEntry)obj;
    String name = entry.getName();
    long size = entry.getSize();
    long compressedSize = entry.getCompressedSize();
    System.out.println(name + " " + size + " " + compressedSize);
  }
}
만약 당신이 J2SE 1.4.1의 jce를 사용한다면.jar에서 상기 JarDir 프로그램을 시험하려면 아래와 같은 출력을 보셔야 합니다. (...에 더 많은 파일을 표시해야 합니다.)

META-INF/MANIFEST.MF  5315  1910
META-INF/4JCEJARS.SF  5368  1958
META-INF/4JCEJARS.DSA  2207  1503
META-INF/    0    2
javax/ 0    0
javax/crypto/  0    0
javax/crypto/interfaces/    0    0
javax/crypto/interfaces/DHKey.class   209   185
javax/crypto/interfaces/DHPublicKey.class    265   215
javax/crypto/interfaces/DHPrivateKey.class   267   215
javax/crypto/interfaces/PBEKey.class  268   224
javax/crypto/SecretKey.class  167   155
...
내용 맨 위에 META-INF가 포함된 줄을 입력하십시오. 이것은 menifest와 보안 검증 정보입니다.크기가 0인 항목은 파일이 아니라 디렉토리입니다.
JAR 파일에서 파일 내용을 실제로 읽으려면 해당 항목의 InputStream을 얻어야 합니다.이것은 JarEntry와 다르다.JarEntry는 포털 정보만 포함하고 실제 내용은 포함하지 않습니다.이것은 마치 File과 File InputSteram의 차이와 같다.파일만 액세스하면 해당 파일이 열리지 않으며 디렉토리에 있는 정보만 읽습니다.다음 항목에서 InputStream을 얻는 방법에 대해 설명합니다.
InputStream input = jarFile.getInputStream(entry);
입력 흐름을 얻은 후, 너는 다른 흐름을 읽는 것처럼 그것을 읽으면 된다.텍스트 흐름이라면 흐름에서 문자를 가져오려면 Reader를 사용해야 합니다.바이트 흐름, 예를 들어 그림은 직접 읽을 수밖에 없다.
다음 프로그램은 JAR 파일에서 내용을 읽는 것을 보여 줍니다.프로그램을 실행할 때 JAR 파일에서 읽을 파일 이름을 지정해야 합니다. 이 파일은 텍스트 파일 형식이어야 합니다.

import java.io.*;
import java.util.jar.*;
public class JarRead {
  public static void main (String args[]) 
    throws IOException {
    if (args.length != 2) {
      System.out.println("Please provide a JAR filename and file to read");
      System.exit(-1);
    }
    JarFile jarFile = new JarFile(args[0]);
    JarEntry entry = jarFile.getJarEntry(args[1]);
    InputStream input = jarFile.getInputStream(entry);
    process(input);
    jarFile.close();
  }
  private static void process(InputStream input) 
    throws IOException {
    InputStreamReader isr = 
      new InputStreamReader(input);
    BufferedReader reader = new BufferedReader(isr);
    String line;
    while ((line = reader.readLine()) != null) {
      System.out.println(line);
    }
    reader.close();
  }
}

만약 당신이 myfiles라는 이름을 가지고 있다면.jar의 JAR 파일 중 하나는spider입니다.txt 텍스트 파일, 그 pider를 가정합니다.txt는 다음과 같은 텍스트를 포함합니다.

The itsy bitsy spider 
Ran up the water spout
Down came the rain and
Washed the spider out 

다음 명령을 실행하여 JAR 파일에서 텍스트 파일의 내용을 표시합니다.
java JarRead myfiles.jar spider.txt
본고에서 기술한 것이 여러분의 자바 프로그램 설계에 도움이 되기를 바랍니다.

좋은 웹페이지 즐겨찾기