第六章 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
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 
支持: 新浪微博 腾讯微博

目录
相关文章
|
安全 开发工具 git
CTF工具隐写分离神器Binwalk安装和详细使用方法
CTF工具隐写分离神器Binwalk安装和详细使用方法
1462 0
|
6月前
|
JSON Go 数据格式
第十四章 文件操作
第十四章 文件操作
45 2
|
6月前
|
缓存 Oracle Java
Java常用基础知识-kaic.docx
Java常用基础知识-kaic.docx
|
存储 Android开发 iOS开发
【重学C/C++系列(七)】:文件操作基础
内存中的数据在断电之后就会消失,如果需要**持久化数据**,则需要将数据写入到文件中
【重学C/C++系列(七)】:文件操作基础
|
Unix Linux Windows
文件/代码 对比工具推荐
WinMerge 【for Windows】 https://winmerge.org/ WinMerge 开源用于Windows的差分和合并工具。WinMerge可以比较文件夹和文件,以便于理解和处理的可视文本格式呈现差异。 支持MicrosoftWindowsXPSP 3或更高版本 处理Windows、Unix和Mac文本文件格式 Unicode支持 选项卡接口
375 0
文件/代码 对比工具推荐
|
人工智能 JavaScript 前端开发
开发常用代码笔记
开发常用代码笔记
开发常用代码笔记
|
JSON 数据格式 Python
初学Python——文件操作第三篇
一、引言 什么?有了第二篇文件操作还不够?远远不够!而且在读完第三篇文件操作还是不够。关于文件的操作,后续的学习中将不断学习新的操作方式,使用更加合适的方法。 进入正题,上一篇讲到,Python对文件最基本的读取写入操作,都必须是字符串,所有的数据必须要转化成字符串写入,都出来的也全部都是字符串,这会给我们实际应用中造成一些困扰,上一篇文章讲述了如何使用eval()函数,但是也有局限性,比如:字符串格式稍有错误(结尾带有换行符\n)就会转换出错;写入文件之前在内存中的int型数据,写入读取仔eval后无法变回int型等。
1487 0
|
SQL XML 数据安全/隐私保护