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

目录
相关文章
|
11月前
|
Linux iOS开发 MacOS
编程小白的自学笔记十四(python办公自动化创建、复制、移动文件和文件夹)
编程小白的自学笔记十四(python办公自动化创建、复制、移动文件和文件夹)
|
4月前
|
数据采集 前端开发 JavaScript
使用Python打造爬虫程序之揭开动态加载内容的神秘面纱:Python爬虫进阶技巧
【4月更文挑战第19天】本文探讨了如何用Python爬虫抓取动态加载内容。动态加载内容常由JavaScript异步加载,传统爬虫无法捕获。文章介绍了两种方法:1) 使用Selenium模拟浏览器行为,等待动态内容出现并提取数据;2) 分析网页API请求,直接模拟请求获取数据。同时,提醒注意性能、反爬策略和API变动等问题,强调持续学习与实践的重要性。
|
Java Linux API
【InsCode】InsCode打造的JavaSE与Linux命令互融的伪Linux文件系统小项目
【InsCode】InsCode打造的JavaSE与Linux命令互融的伪Linux文件系统小项目
100 0
|
存储 Android开发 iOS开发
【重学C/C++系列(七)】:文件操作基础
内存中的数据在断电之后就会消失,如果需要**持久化数据**,则需要将数据写入到文件中
【重学C/C++系列(七)】:文件操作基础
|
算法 Java Python
趁着课余时间学点Python(十四)文件操作
趁着课余时间学点Python(十四)文件操作
116 0
趁着课余时间学点Python(十四)文件操作
|
Linux 图形学 Android开发
Unity与 SO 交互 ☀️| .so文件(动态链接库 ) 基础知识科普
📢前言 因为最近用到了so文件相关内容 所以来学习一下.so文件相关的知识,正好来写博客也当是记录并分享一些知识 最终目的是在Unity中与so文件进行交互处理,但是本篇文章需要先对so文件有一个基本的认识 这样在后面交互流程中也能 加深一点理解
|
JSON 数据格式 Python
初学Python——文件操作第三篇
一、引言 什么?有了第二篇文件操作还不够?远远不够!而且在读完第三篇文件操作还是不够。关于文件的操作,后续的学习中将不断学习新的操作方式,使用更加合适的方法。 进入正题,上一篇讲到,Python对文件最基本的读取写入操作,都必须是字符串,所有的数据必须要转化成字符串写入,都出来的也全部都是字符串,这会给我们实际应用中造成一些困扰,上一篇文章讲述了如何使用eval()函数,但是也有局限性,比如:字符串格式稍有错误(结尾带有换行符\n)就会转换出错;写入文件之前在内存中的int型数据,写入读取仔eval后无法变回int型等。
1481 0
|
存储 C语言 知识图谱
初学Python——文件操作第二篇
前言:为什么需要第二篇文件操作?因为第一篇的知识根本不足以支撑基本的需求。下面来一一分析。 一、Python文件操作的特点 首先来类比一下,作为高级编程语言的始祖,C语言如何对文件进行操作?    字符(串):fputc和fgetc,fputs和fgets,fwrite和fread,fprint...
1276 0
|
SQL XML 数据安全/隐私保护
|
Windows 数据格式 XML