开发者社区> 宋志辉> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

第六章 Libgdx之文件处理

简介: Android游戏开发群:290051794Libgdx游戏开发框架交流群:261954621    Libgdx的文件模型可以向你提供: 1、 读取文件。
+关注继续查看

Android游戏开发群:290051794
Libgdx游戏开发框架交流群:261954621 

 

Libgdx的文件模型可以向你提供:

1、 读取文件。

2、 写入文件。

3、 复制文件。

4、 移动文件。

5、 删除文件。

6、 列出文件和目录。

7、 检查文件或目录是否存在。

Android系统中,文件可以以资源或assets的形式存储在应用的APK内。这些文件是只读的。Libgdx仅仅使用assets机制,它提供了原始的访问字节流的方法,更适合传统的文件系统。资源文件适于普通的应用,但用在游戏上时会产生一些问题。Android会在加载他们时对他们进行控制,比如自动调整图像大小。

Assets存储在Android项目下的assets文件夹,会在你部署应用时自动打包到APK文件里。其它应用没有访问assets文件夹的权限。

文件也可以存储在内部存储器,可以进行读写。每个已经安装的应用都会有一个专有的内部存储目录。这个目录只能被这个应用读写。可以认为这个文件夹是改应用的专属区。

最后,文件可以存储在外部存储区,比如SD卡。外部存储不总是可用,比如用户拔出SD卡。如果文件读写频繁,可以选择存储在这个地方。写入外部存储需要在AndroidManifest.xml文件中添加相关权限。

文件(存储)类型

Libgdx中的文件有一个文件处理类的实例表示。这个文件处理类中定义了文件存储位置。

类型

描述,文件路径和特性

Classpath

Classpath文件直接存储在源文件夹。这些直接打包到你的jar包而且是只读的。它们有存在的意义,但是要尽量避免。

Internal

Internal文件是指存储在Android项目下的assets文件夹。这些文件时只读的。如果文件不能在assets文件夹下找到,文件模块会搜索classpath类型的文件。

Local

Local文件在Android中存储在应用的内部存储中。

External

存储在SD卡中

Absolute

文件的完全路径。

Internal文件:所有的打包在应用中的文件(图像,音频等)。

Local文件:如果你需要小的文件比如存储游戏状态,使用Local文件。只有当前应用可以读写。如果想存储值,可以考虑Preferences

External文件:如果你需要写入大的文件,比如截图,或者从网络下载文件,可以考虑外部存储。注意:外部存储的文件是灵活的,意味着用户可以删除或写入文件。

检查存储可用性和路径

可以通过文件模块查询存储是否可用:

boolean isExtAvailable = Gdx.files.isExternalStorageAvailable();

boolean isLocAvailable = Gdx.files.isLocalStorageAvailable();


 

你也可以通过以下方式获取以下方式获取内部存储和外部存储的根目录:

String extRoot = Gdx.files.getExternalStoragePath();

String locRoot = Gdx.files.getLocalStoragePath();


 

获取文件句柄

一个文件句柄可以通过以上提到的文件模型获取。以下代码获取myfile.txt文件:

FileHandle handle = Gdx.files.internal("data/myfile.txt");


 

文件句柄实例通过方法传递,负责文件读写。比如通过一个Texture类加载一个图形,或者通过音频模块加载音频文件。

获取和检查文件的属性

有时需要检查一个文件是否存在或者或获取一个目录,文件句柄通过简洁的方法完成这些。

以下是检查文件是否存在或者目录是否为目录。

boolean exists = Gdx.files.external("doitexist.txt").exists();

boolean isDirectory = Gdx.files.external("test/").isDirectory();


 

获取目录的文件:

FileHandle[] files = Gdx.files.local("mylocaldir/").list();

for(FileHandle file: files) {

   // do something interesting here

}


 

我们同样可以可以获取父目录的文件,或者在目录中创建文件。

FileHandle parent = Gdx.files.internal("data/graphics/myimage.png").parent();

FileHandle child = Gdx.files.internal("data/sounds/").child("myaudiofile.mp3");


 

parent会指向“data/graphics”,child会指向”data/sounds/myaudiofile.mp3”

文件句柄中有很多的方法来查看文件的属性。可以查看相关文档。

错误处理

有些文件句柄的操作可能失败。这里使用“RuntimeExceptions”检查异常。

从文件读取

获取文件句柄后,我们可以将它传递给从文件中载入内容的类,或者读取里面的内容。后者是通过文件句柄中的输入方法实现。下面是示例:

FileHandle file = Gdx.files.internal("myfile.txt");

String text = file.readString();


 

如果你有二进制数据,可以很容易的加载到数组中:

FileHandle file = Gdx.files.internal("myblob.bin");

byte[] bytes = file.readBytes();


 

文件句柄类的更多更能,可以参考相关文档。

写入文件

跟读取文件一样,文件句柄同样提供写入文件的方法。注意只有Localexternalabsolute文件类型支持写入文件。实例:

FileHandle file = Gdx.files.local("myfile.txt");

file.writeString("My god, it's full of stars", false);


 

writeString的第二个参数表示是够将第一个参数附加到文件。如果为false,当前文件被覆盖。

当然可以将二进制数据写进文件:

FileHandle file = Gdx.files.local("myblob.bin");

file.writeBytes(new byte[] { 20, 3, -2, 10 }, false);


 

删除、复制、重命名和移动文件或目录

这些操作同样只对localexternalabsolute有效。

FileHandle from = Gdx.files.internal("myresource.txt");

from.copyTo(Gdx.files.external("myexternalcopy.txt");

 

Gdx.files.external("myexternalcopy.txt").rename("mycopy.txt");

Gdx.files.external("mycopy.txt").moveTo(Gdx.files.local("mylocalcopy.txt"));

 

Gdx.files.local("mylocalcopy.txt").delete();


 作者:宋志辉 
出处:http://blog.csdn.net/song19891121
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 
支持: 新浪微博 腾讯微博

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
6、Libgdx文件处理
(官网:www.libgdx.cn) 简介 Libgdx应用运行在四个不同的平台中:桌面系统(Windows,Linux,Mac OS X等等),Android,iOS和JavaScript或者WebGL。
646 0
第八章 Libgdx输入处理(8)振动器
Android游戏开发群:290051794 Libgdx游戏开发框架交流群:261954621   虽然这不是严格的输入设备,只不过是一个外设而已。
910 0
第五章(3)Libgdx应用框架之查询
应用接口提供了多种方法查询运行时环境的性能。 获取应用类型 有时获取应用运行的环境是非常必要的,Application.getApplicationType()方法返回当前应用运行的平台: switch(Gdx.
675 0
第五章(4)Libgdx应用框架之日志记录
  应用接口提供了简单的日志记录功能。 消息可以是正常的信息,可以是错误消息和调试信息: Gdx.app.log("MyTag", "myinformative message"); Gdx.app.error("MyTag", "myerror message", exception); Gdx.app.debug("MyTag", "myerror message");   在Android中,消息记录在LogCat中。
621 0
趁着课余时间学点Python(十四)文件操作
趁着课余时间学点Python(十四)文件操作
0 0
+关注
宋志辉
我竭尽全力
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Storm源码走读笔记
立即下载
Python第五讲——关于爬虫如何做js逆向的思路
立即下载
Python 脚本速查手册
立即下载