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

目录
相关文章
|
存储 C++ 容器
multiset和multimap(map和set的可重复版)
multiset和multimap(map和set的可重复版)
158 1
multiset和multimap(map和set的可重复版)
|
存储 SQL 算法
跑批为什么这么难
业务系统产生的明细数据需经加工处理以支持企业经营,此过程称作“跑批”,常在夜间进行以免影响生产系统。跑批任务涉及大量数据及复杂计算,导致耗时较长。开源计算引擎SPL可直接基于文件系统计算,提供更优算法与存储机制,显著提升跑批效率。例如,L银行贷款协议跑批任务从2小时缩短至10分钟,性能提高12倍;P保险公司车险业务的历史保单关联任务从近2小时缩短至17分钟,速度提升近7倍;T银行贷款跑批任务提速204倍。
|
Java 测试技术 API
弃用 RestTemplate,来了解一下官方推荐的 WebClient !
在 Spring Framework 5.0 及更高版本中,RestTemplate 已被弃用,取而代之的是 WebClient。WebClient 提供了非阻塞 I/O、函数式编程风格、更好的错误处理和流式传输支持等优势。本文介绍了如何在 Spring Boot 3 中使用 WebClient 发送同步和异步请求,并处理各种错误。虽然 RestTemplate 仍可用于某些场景,但 WebClient 是现代 Spring 应用程序的更好选择。
弃用 RestTemplate,来了解一下官方推荐的 WebClient !
|
12月前
|
运维 安全 关系型数据库
​​国内 5 个最佳的控制面板,可轻松管理服务器
在当今数字化飞速发展的时代,Linux 服务器作为众多企业和开发者的核心基础设施,其管理的高效性和专业性成为了保障业务稳定运行的关键因素。对于专业的服务器运维人员和开发团队而言,理解这些面板的细节差异至关重要。这不仅关乎服务器管理的效率,更涉及到系统的稳定性、安全性以及对开源应用生态的适应性。期望本次全面的盘点能为您的 Linux 服务器管理策略提供坚实的理论依据和实践指导,确保服务器管理工作在技术迭代和业务发展的浪潮中保持高效、稳定且安全的运行状态。
​​国内 5 个最佳的控制面板,可轻松管理服务器
|
SQL 存储 缓存
【MySQL】一文了解MySQL的基础架构及各个组件的作用
不管是开运、运维、测试,都或多或少的要接触MySQL,了解MySQL的基础架构及各个组件之间的关系,有助于我们更加深入的理解MySQL
1244 6
【MySQL】一文了解MySQL的基础架构及各个组件的作用
|
算法 安全 网络安全
即时通讯安全篇(十三):信创必学,一文读懂什么是国密算法
本文将尽量以通俗易懂的文字,为你分享国密算法的种类、技术原理和应用场景等。
1456 0
|
存储 Java
ThreadLocal 有什么用
ThreadLocal 有什么用
128 0
|
API 调度 索引
|
机器学习/深度学习 算法
算法分析 | 第三套(渐近符号)
算法分析 | 第三套(渐近符号)
195 0
|
Cloud Native
《云原生架构白皮书 2022版》电子版地址
本书由阿里云 20+ 位云原生技术专家共同编撰,也是作为业界首本全方位构建云原生架构规划与实践全景图的白皮书。本书在详细阐述云原生架构定义的同时,完整展示云原生架构应用所需的演进路径与设计规则,旨在帮助企业更好地理解与应用云原生架构,助力企业数字化转型升级。
207 0
《云原生架构白皮书 2022版》电子版地址