2011-12-30 1 views
0

Java로 작은 게임을 개발하고 있으며 모든 파일이 data 폴더에 번들로되어 있으며 응용 프로그램에서 해당 파일을 읽습니다. 그러나 이러한 파일을 단일 파일, .pak, .zip 등으로 압축하여 배포 할 때 사용합니다. 내 게임은 여러 패키지로 작업 할 계획이므로 많은 파일이 들어있는 폴더 대신 단일 파일을 갖는 것이 더 바람직합니다. Zip 압축/압축 풀기를 살펴 봤지만 압축 파일이나 보호 기능이 필요없는 가상 파일 시스템을 만들고 싶습니다.Java에서 가상 파일 시스템 내의 단일 파일에서 자산을 처리하는 방법

무엇을 제안합니까? 가상화 라이브러리가 있습니까? 또한 내 패키지를 쉽게 작성하는 것이 중요합니다.

+0

zip 압축을 끌 수 있습니다 .. http://docs.oracle.com/javase/1.4.2/docs/api/java/util/zip/Deflater.html#NO_COMPRESSION – wowest

답변

2

데이터 파일을 클래스와 동일한 디렉토리에 놓은 다음 클래스 경로 (예 : Class.getResourceAsStream())를 사용하여 읽을 수 있습니다. 이렇게하면 모든 데이터를 포함하는 애플리케이션을 패키지로 만들 수 있습니다. 단일의 Jar 파일

Maven을 사용하는 경우 resources 섹션에 넣으십시오.

이들을 개별적으로 배포하려면 본질적으로 똑같은 작업을 수행 할 수 있습니다. 응용 프로그램을 코드 용과 데이터 용의 두 개의 Jar 파일로 배포하면됩니다. 클래스 패스에 둘 다 넣으면 방금 설명한 방법으로 데이터에 액세스 할 수 있습니다. 그런 다음 응용 프로그램의 데이터 부분을 별도로 릴리스하고 빌드 할 수 있습니다.

+0

하지만 패키지하고 싶지 않습니다. 내 전체 응용 프로그램을 하나의 Jar 파일로 만들려면 Game.jar 및 data.pak 파일을 독립적으로 만들고 싶습니다. 따라서 data.pak 파일은 빌드 할 필요없이 변경할 수 있습니다. – Mustafa

+0

@Mustafa : 내 대답을 읽어보십시오. 클래스 패스에있는 한 모든 위치의 애셋으로 jar (또는 zip)를 보유 할 수 있습니다. 모든 IDE는 필요한 MANIFEST.MF를 생성합니다. – fdreger

+0

고맙지 만 zip이나 다른 파일을 가상 시스템을 통해 직접 읽을 수있게 만드는 방법을 묻습니다. 매번 내 파일을 추출하고 싶지 않습니다. – Mustafa

2

일반적인 방법은 .class 파일과 함께 자산을 유지하는 것입니다 (99 %의 경우에는 빌드하는 실행 파일 안에 저장 됨). 이 방법은 클래스 로더가 읽을 수 있습니다. 이것은 당신이 게임은 패키지 또는 폭발 디렉토리에서 실행되는 방식을 변경하는 경우, 자원이 발견 될 것을 보장 :

package pl.alx.example; 

class Whatever { 
    public Whatever(){ 
     // I assume that you keep your image in the same folder as Whatever 
     InputStream is = this.getClass().getResourceAsStream("/pl/alx/example/file.png"); 
     // read the png 

    } 
} 

경우 별도의 파일로 컴파일 된 클래스 및 자원을 유지하는 주장 어떤 이유로, 당신은 아직 할 수 이 기술을 사용하십시오. 클래스 패스에 리소스가있는 항아리를 추가하면됩니다 (IDE가 대신 할 것입니다).