2013-01-27 4 views
5

현재 LibGDX 게임을 작성 중이며 스프레드 시트 용 XML 파일을 열어야합니다. 불행히도 파일을 열려고하면 IOException이 표시됩니다. 파일이 올바른 위치에 있고 프로젝트가 정리되고 최신 상태입니다.Android에서 LibGDX를 사용하여 파일을 열 수 없습니다.

다음과 같은 키커가 있습니다. LibGDX는 동일한 디렉토리에 이미지 파일을 열고 표시하며 사실 자체 XML 파일을 가져옵니다. FileHandle 개체 (나는 그것 logcat 크기를 가지고 그것을 일치). 그러나 SAX 파서로 파일을 보내면 파일을 열 수 없다는 메시지가 나오면 예외가 발생합니다.

여기 ClipSprite 클래스의 내부 코드의 문제 라인이다 : 여기

private void parseConfigFile(FileHandle file) throws ParserConfigurationException, SAXException 
{ 
    //Use a SAX parser to get the data out of the XML file. 
    SAXParserFactory factory = SAXParserFactory.newInstance(); 
    SAXParser parser = factory.newSAXParser(); 
    XMLConfigHandler handler = new XMLConfigHandler(); 

    //Parse through the document 
    try 
    { 
     parser.parse(file.path(),handler); //IOException here 
    } 

가 그리고 내가 주 LibGDX 클래스의 create 방식의 게임에서 파일을 선택하는 코드입니다

//This loads a png file 
    texture = new Texture(Gdx.files.internal("data/graphics/CDE1/CDE1.png")); 
    texture.setFilter(TextureFilter.Linear, TextureFilter.Linear);  
    TextureRegion region = new TextureRegion(texture, 0, 0, 512, 275); 

    //Here I load the xml file and it tells me how many bytes it is 
    Gdx.app.error("File","xml bytes:"+Gdx.files.internal("data/graphics/CDE1/CDE1.xml").length()); 

    //Here I load the same file and it crashes 
    //Note that it looks in the subdirectory and finds /CDE1.xml properly 
    animation = new ClipSprite("data/graphics/CDE1"); 

logcat 오류 :

java.io.IOException: Couldn't open data/graphics/CDE1/CDE1.xml 

왜 ide할까요? 파일을 ntify, 아직 열 수 없다는 IOExceptions가 표시됩니까? 도움을 주셔서 감사합니다. 필요한 경우 더 자세한 정보를 제공해 드리겠습니다. 은 "내부"파일을 판독으로, Gdx.files.internal() 대신,

파일을로드 할 수 Gdx.files.local()을 시도해보십시오

+2

IOException 메시지의 파일 경로가 너무 짧게 보입니다. 그 시점에서 더 긴 접두사가 있어야한다고 생각합니다. 내부 파일 또한 classpath 검색에 약간의 불안정합니다. "Gdx.files.local()"을 대신 사용합니까? –

+0

파일의 내용을 구문 분석하려고하는 위치에서 파일의 길이를 성공적으로 검사 한 파일 핸들과 동일한 파일 핸들이 있습니까? –

+0

@RodHyde FileHandle은 올바른 바이트를 가져옵니다. SAX Parser는 File을 사용하지만 (FileHandle은 LibGDX 객체이므로) FileHandle.file()을 제공합니다. – GraphicsMuncher

답변

8

그냥 경우 다른 사람에서 하나의 대답에 위의 모든 의견을 병합하는이 또는 유사한 무언가로 실행 (압축 된) APK의 파일명이며 일반 파일과 같이 "보이지"않을 수도 있습니다. (이것은 당신이 그것으로 할 원하는 경로 이름을 전달하는 것을 코드에 많이 의존한다.)를 libGDX FileHandle file 객체를 사용 file.file()를 들어

얻을 수있는 문자열을 전달하는 file.path() 대신, 파일 핸들을 전달하는 잘못 해석했다.

libGDX FileHandle file의 경우 file.read()을 사용하면 InputStream을 소비자에게 직접 전달할 수 있습니다 (문자열 또는 파일 핸들을 전달하고 열려고하는 대신).

libGDX "internal"파일은 안드로이드 AssetManager file에 매핑되므로 bit wonkysome cases이 될 수 있습니다. 특히, 이들은 압축되어, .jar 또는 .apk 내에 저장 될 수 있고, 종래의 파일 판독 기능에는 보이지 않을 수있다.

+0

위에서 언급 한 주목할만한 코멘트 :'file.file()'은 나중에'IOException'을 발생 시키지만,'file.read()'는하지 않습니다. – GraphicsMuncher

관련 문제