2012-07-18 4 views
0

요즘 많이 물어 봤는데 모든 게시물은 동일한 문제이지만 다른 단계와 다른 가능한 답변이 있습니다 (특정 문제가 이전과 다르기 때문에 하나,하지만 밀접하게 관련). 그래서 내 질문을 반복하는 것처럼 보이면 미안해. 사실, 나는 아닙니다. 나는 Google과 여기에서 검색을 해왔지만 아무도 내 문제를 해결하지 못하는 것 같아요.xar 파일을 만들고 jar 파일 외부에서 읽음

글쎄, 내 파일 계층 구조는 다음과 같습니다

+ MyGame 
    + build.xml 
    + src 
    + ThisIsWhereEclipsePutsTheXMLFile 
    + build 
    + manyFoldersWithClassFiles 
    + aSpecialFolderWhereTheEntryPointIs 

    + ThisIsWhereIWantMyXMLfileToBe.xml 
    + game.jar 

내 문제는 기본적으로이 : 내 프로그램이이 파일에 상태의 저장 한 후 해당 파일을 읽을 예정이다. 이 파일은 같은 폴더에 .jar 파일 밖에 존재해야합니다 (단 하나만 있습니다). 파일이 존재할 수도 있고 존재하지 않을 수도 있습니다. 파일이 있으면 덮어 씁니다.

이전 질문에서 나는 how to read an xml file that's in the same directory에 대해 물었습니다. 내가 이클립스에서 사용할 때 대답은 실제로 내 문제를 해결했다.

하지만 내 전체 프로그램으로 .jar 파일을 만들어야하고, 필요할 때마다 내 xml 파일을 크라우 징 (crear)해야합니다.

이 같다) (저장 내, 그리고 내가 이클립스를 실행할 때 작동하는 것 같군,하지만 난 내 .jar 파일 실행 실행하면 작동하지 않습니다

public void save(Game game) throws IOException{ 
    Document doc = DocumentHelper.createDocument(); 
    doc.add(game.save()); 
    File save=null; 
    save = new File("save.xml"); 

    FileWriter writer = new FileWriter(save); 
    doc.write(writer); 
    writer.close(); 
} 

을 그리고 이것은이다 내가 파일에서 다시에 관한 것은 얻을 방법 :

public Game getinfofromxml() throws IOException{ 
    Game game; 
    SAXReader reader = new SAXReader(); 
    try{ 
     URL fileWithData= new File("save.xml").toURI().toURL(); 
     Document document = reader.read(fileWithData); 
     Element alreadySavedGame= document.getRootElement(); 
     game= getGameSaved(alreadySavedGame); 
    }catch(DocumentException ex){ 
     throw new IOException(); 
    } 
    return game; 
} 

을 다시, 이것은 이클립스에서 작동하지만, 난 내 jar 파일에서 실행할 때 작동하지 않습니다. Eclipse에서 xml 파일은 MyGame 폴더에 만들어 지지만 내 .jar 폴더에는 생성되지 않습니다. 내 .jar을 실행할 때 XML이 전혀 작성되지 않습니다.

이제는 클래스 패스와 관련이 있다는 것을 읽었습니다. 컴파일을 어떻게하는지 알려 드리겠습니다.

1) 빌드 디렉토리를 만드는 Ant를 실행합니다. .jar 파일은 자동으로 생성되지 않습니다.

Main-Class: aSpecialFolderWhereTheEntryPointIs.MyMainClass 
Class-Path: . 

3) 내가 cmd를에 .jar 파일 생성 : 2) 내가 쓸 경우, manifest.txt가 파일을 생성 그래서 jar cfm myGame.jar Manifest.txt *

을, 나는라고 생각하지 않습니다 거기에 너무 많은 실수를하면 ...

5 월 개미가 그와 관련이 있습니까? 아이디어가 있으십니까? 미리 감사드립니다 (내 영어는 유감입니다)

답변

1

파일을 쓰고 읽는 방법은 현재 시작 디렉토리의 상대 경로를 사용하고 있습니다 ... 그것은 jvm을 시작한 위치와 쓰기 및 읽기를 기대하는 위치에 따라 다릅니다 너의 파일.

+1

예, 일반적으로 파일을 저장할 위치를 제어하는 ​​절대 경로를 사용해야합니다. 사용자가 속성이나 다른 것을 통해이 경로를 제어하도록 허용 할 수 있습니다. –

+0

만약 내가 두 번 clic .jar 파일 .. 그 디렉토리에서 시작된 jvm 아닌가요? – FDrico

4

'현재 디렉토리'에 대해 생각하지 말고 설정을 지정하십시오. this answer에서 논의 된대로 user.home에 있습니다. 오랫동안 OS 제조업체는 이 아니며이 config로 설정되어 있습니다. 응용 프로그램 디렉토리의 설정.

도 참조하십시오. this answer "Java 프로그램이 jar 파일을 읽기 및 쓰기 용으로 어떻게 사용할 수 있습니까?" 더 많은 팁.

관련 문제