Android не может открыть файл с помощью LibGDX

В настоящее время я пишу игру LibGDX, и мне нужно открыть файл XML для спрайта. К сожалению, когда я пытаюсь открыть файл, я получаю IOException . Файлы существуют в правильных местах, очищены и обновлены проект и т. Д.

Вот кикер: 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 } 

И вот код, в котором я выбираю файл в игре в методе create в основном классе LibGDX

  //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 

Почему он может идентифицировать файл, но я все еще получаю IOExceptions о том, что не могу его открыть? Спасибо за помощь, и при необходимости предоставим вам дополнительную информацию.

Просто чтобы объединить все комментарии выше в один ответ, если кто-то другой столкнется с этим или чем-то подобным:

Попробуйте Gdx.files.local() загрузить файл, а не Gdx.files.internal() , поскольку «внутренние» файлы считываются из (сжатого) APK и не могут быть «видимыми», как обычный файл. (Это сильно зависит от того, какой код вы передаете пути, который хотите сделать с ним.)

Для FileHandle file FileGandle FileHandle file libGDX используйте file.file() чтобы передать дескриптор файла, а не file.path() чтобы передать строку, которая может быть неверно истолкована.

Для FileHandle file FileGandle FileHandle file file.read() используйте file.read() чтобы передать InputStream непосредственно потребителю (вместо передачи строки или дескриптора файла и ожидая их открытия).

Внутренний файл libGDX сопоставляется с файлом Android AssetManager , поэтому в некоторых случаях он может быть немного неудобным . В частности, они могут быть сжаты и сохранены в .jar или .apk и не видны традиционным функциям чтения файлов.