Tôi hiện đang viết một trò chơi LibGDX và tôi cần mở một tệp XML cho một spritesheet. Thật không may, khi tôi cố gắng để mở tập tin, tôi nhận được một IOException
. Các tệp tồn tại ở đúng nơi, dự án đã được dọn dẹp và cập nhật, v.v.Android không thể mở tệp bằng LibGDX
Đây là phần khởi động: LibGDX sẽ mở và hiển thị tệp hình ảnh trong cùng một thư mục và trên thực tế sẽ lấy tệp XML trong riêng mình FileHandle
đối tượng (Tôi đã có nó logcat kích thước và nó phù hợp). Tuy nhiên, khi tôi gửi tệp đến một trình phân tích cú pháp SAX, tôi nhận được một ngoại lệ dẫn tôi trở lại tệp tin nói rằng nó không thể mở nó.
Đây là dòng vấn đề mã bên trong lớp 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
}
Và đây là đoạn code mà tôi chọn tập tin trong các trò chơi trong phương pháp create
trong lớp LibGDX chính
//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");
Lỗi từ logcat:
java.io.IOException: Couldn't open data/graphics/CDE1/CDE1.xml
Tại sao nó có thể ide ntify tập tin, nhưng tôi vẫn nhận được IOExceptions về việc không thể mở nó? Cảm ơn sự giúp đỡ và tôi sẽ cung cấp thêm thông tin nếu cần.
Đường dẫn tệp trong thông báo IOException trông quá ngắn. Nó sẽ có một tiền tố dài hơn tại thời điểm đó, tôi nghĩ rằng ... Các tập tin nội bộ cũng là một chút chiến thắng với các tìm kiếm classpath. Thay vào đó, việc sử dụng "Gdx.files.local()" có hoạt động không? –
Trình xử lý tệp có cố gắng phân tích nội dung của tệp giống với nội dung của tệp mà bạn kiểm tra thành công độ dài của tệp không? –
@RodHyde FileHandle nhận được các byte đúng. SAX Parser lấy File mặc dù (FileHandle là một điều LibGDX), vì vậy tôi cung cấp cho nó FileHandle.file(). – GraphicsMuncher