(官网:www.libgdx.cn

简介


Libgdx应用运行在四个不同的平台中:桌面系统(Windows,Linux,Mac OS X等等),Android,iOS和JavaScript或者WebGL。每个平台处理文件I/O有一些不同。

Libgdx文件模块提供了以下操作文件功能:

  • 从文件中读取

  • 写入到文件

  • 复制文件

  • 移动文件

  • 删除文件

  • 遍历文件和目录

  • 检测文件或目录是否存在

    在我们深入了解Libgdx的文件模块之前,首先了解一下各个系统的差异。

各个平台文件系统


这里我们简单的了解一下Libgdx支持的各个平台的文件系统。

Desktop(Windows,Linux,Mac OS X等等)


在桌面系统中,文件系统是一个大块的内存。文件可以通过当前的工作目录或者绝对路径被引用。可以忽略相关权限,文件和目录通常可以被所有的程序读写。

Android


在Android中情况有一点复杂。文件可以通过资源或者assets的形式存储在应用的APK中。这些文件是只读的。Libgdx仅仅使用assets机制,assets提供了对原始文件的比特流的访问并且最接近传统的文件系统。资源文件适用于Android的常规的应用,但是在用到游戏当中时会遇到很多问题。Android在载入时可以控制资源文件,比如自动调整图片大小。

Assets存储在Android项目的assets目录下并且将被打包到APK中,其它的应用不可以访问这些文件。

文件也能保存到内部存储中,可以进行读写。每一个安装的应用都有一个独立的目录,这个目录只有这个应用才有访问权限。可以将这种存储视为应用的私有存储空间。

文件也可以存储到外存中,像SD卡。外存并不是所有的时候都可用。文件存储的目录不稳定,在使用外存之前,你需要在AndroidManifest.xml中添加相关权限。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

iOS


在iOS中所有文件类型暂不可用。

Javascript或WebGL


一个原始的Javascript或WebGL应用没有一个传统的文件系统的概念。像图片等资源通过URL来实现。现在浏览器统一支持本地存储,这和传统的文件系统基本类似。

Libgdx提供给你对于只读文件系统的一种抽象。

文件(存储)类型


在Libgdx中的文件代表了一个FileHandle类的实例,一个FileHandle有一个指定了文件存储位置的类型。

类型 描述 Desktop Android HTML5 iOS
Classpath 只读 是的 是的 是的 是的
Internal 只读 是的 是的 是的 是的
Local 读写 是的 是的 是的 是的
External 读写 是的 是的 是的 是的
Absolute 读写 是的 是的 是的 是的

相对路径和classpath文件通常是在工具中使用,对游戏来说是可以忽略的,你能使用的三种类型如下:

  • Internal文件:所有的assets(图片,音频文件等)都是internal文件。如果你使用Setup UI(也就是Gdx-setup),只需要将他们放置到Android项目的assets文件夹。

  • Local文件:如果你需要写入到文件中某些数据,比如游戏状态,使用local文件。对你的应用来说是私有的。如果是存储key或者之,可以使用Preferences。

  • External文件:如果需要写入大的文件,比如截屏,或者从网络上下载文件,需要使用external存储。注意的是,external可以被用户删除。

检测存储和路径的可用性


不同的存储类型可能在不同的平台不能使用。可以通过文件模块来判断是否可用。

boolean isExtAvailable = Gdx.files.isExternalStorageAvailable();

boolean isLocAvailable = Gdx.files.isLocalStorageAvailable();

同样可以查询external和local存储的根目录:

String extRoot = Gdx.files.getExternalStoragePath();

String locRoot = Gdx.files.getLocalStoragePath();

获取文件处理

FileHandle可以通过文件模块获取上述的类型,接下来的代码是获取internal的myfile.txt文件。

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

列出和检查文件属性

有些时候检测特定的文件是否存在或者列出当前目录的文件是必要的。FileHandle提供了简洁的方法来实现。

以下是一个实例,检测文件是否存在,是否是文件夹。

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) {

// 在这里做你想要做的事情。

}

警告:如果没指明文件夹,list将为空。

注意:internal目录在Desktop下不支持。

我们可以查询文件的父文件夹:

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

还有更多的功能,可以查阅javadoc文档。

注意:这些方法大部分不支持HTML5。

错误处理


有些时候,通过FileHandle操作文件可能导致失败。我们可以使用RuntimeExceptions来捕获异常。在90%的情况下,我们访问的文件是已知存在的。

读取一个文件


获取FileHandle之后,我们可以载入文件内容,或者读取内容。

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

String text = file.readString();

如果你是读取二进制数据,可以通过以下方式。

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

byte[] bytes = file.readBytes();

还有更多的方式,可以查阅javadocs。

写入到文件


跟读取文件相同。需要注意的是,只有local,external和absolute文件类型支持写入。

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

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

删除,复制,重命名和移动文件或文件夹


这些操作同样是在local,external和absolute文件类型下操作。

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();

www.libgdx.cn版权所有,如需转载,注明出处)

6、Libgdx文件处理的更多相关文章

  1. Libgdx 循环绘制图片时间隔的问题

    在libgdx中使用循环绘制一张图片铺满某个区域时,有可能会遇到像素计算没有问题时,图块中间还是有约1像素的间隔,或者是本来没有间隔,做了缩放处理之后发现中间有间隔. 解法 当使用Texture加载图 ...

  2. Libgdx 开发指南(1.2) 应用框架——模块概览

    模块概览 引言 LibGDX由一些为一个典型游戏架构中的各个步骤提供服务的模块组成. Input:为所有平台提供一致的输入模型与处理器.支持键盘.触屏.加速度传感器与鼠标. Graphics:使用硬件 ...

  3. Libgdx 开发指南(1) 应用框架

    应用框架 模块 Libgdx包含五个核心接口与操作系统交互,各自实现了如下接口: Application:运行应用,向client通知应用层事件,例如窗口大小的改变(window resizing). ...

  4. 4.3、Libgdx启动类和配置

    (原文:http://www.libgdx.cn/topic/45/4-3-libgdx%E5%90%AF%E5%8A%A8%E7%B1%BB%E4%B8%8E%E9%85%8D%E7%BD%AE) ...

  5. 日入过百优质消除手游数据分享—萌萌哒包子脸爱消除(游戏开发引擎:libgdx)

    从2014年开始,消除游戏异常火爆,从消除小星星到腾讯的天天消除都赢得了海量用户.目前,各大市场上开心消消乐等游戏依旧火爆.消除游戏一直持续保持着女性和孩子的主流游戏地位.虽然市场上消除游戏种类很多, ...

  6. Libgdx New 3D API 教程之 -- Libgdx中使用Materials

    This blog is a chinese version of xoppa's Libgdx new 3D api tutorial. For English version, please re ...

  7. 【开源java游戏框架libgdx专题】-13-开发工具-地图的使用

    支持libGDX的地图编辑器有很多种,其中比较常用的工具为Tiled地图工具.Tiled是一款非常好用的地图编辑器.下载地址:http://www.mapeditor.org TiledMap类: 又 ...

  8. 【开源java游戏框架libgdx专题】-08-中文显示与绘制

    libgdx虽然是由美国人Mario Zechner(即BadlogicGames)写的开源引擎,由于Libgdx底层是用OpenGL实现的,所以Libgdx是可以支持中文的,在libgdx中的汉字都 ...

  9. 【开源java游戏框架libgdx专题】-07-文件处理

    介绍:文件处理在不同平台的文件管理是略有差异的 Desktop(Windows,Linux,Mac OS X等等):在桌面系统中,文件系统是一个大块的内存.文件可以通过当前的工作目录或者绝对路径被引用 ...

随机推荐

  1. Docker常见仓库MongoDB

    MongoDB 基本信息 MongoDB 是开源的 NoSQL 数据库实现. 该仓库提供了 MongoDB 2.2 ~ 2.7 各个版本的镜像. 使用方法 默认会在 27017 端口启动数据库. $ ...

  2. springMVC源码分析--ViewResolver视图解析器(一)

    SpringMVC用于处理视图最重要的两个接口是ViewResolver和View.ViewResolver的主要作用是把一个逻辑上的视图名称解析为一个真正的视图,SpringMVC中用于把View对 ...

  3. iOS开源加密相册Agony的实现(七)

    简介 虽然目前市面上有一些不错的加密相册App,但不是内置广告,就是对上传的张数有所限制.本文介绍了一个加密相册的制作过程,该加密相册将包括多密码(输入不同的密码即可访问不同的空间,可掩人耳目).Wi ...

  4. Dynamics CRM 本地插件注册器连CRMAn unsecured or incorrectly secured fault was received from the other party

    今天遇到个问题,在本地打开插件注册器连接到远程CRM服务器时报如下问题 但我在CRM服务器上连接注册器是可以打开的,所以不存在账号权限这类的问题了(当然我用的是超管的账号也不可能存在),最后查询得知是 ...

  5. Why Doesn't Python Have Switch/Case?

    Why Doesn't Python Have Switch/Case? Tuesday, June 09, 2015 (permalink) Unlike every other programmi ...

  6. Android开发基础规范(一)

    转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52602487 前言:Androi ...

  7. Hadoop与分布式数据处理 Spark VS Hadoop有哪些异同点?

    Spark是一个开源的通用并行分布式计算框架,由加州大学伯克利分校的AMP实验室开发,支持内存计算.多迭代批量处理.即席查询.流处理和图计算等多种范式.Spark内存计算框架适合各种迭代算法和交互式数 ...

  8. [struts2学习笔记] 第三节 创建struts 2 HelloWorld所需的六个步骤

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/40349201 官方文档:http://struts.apache.org/releas ...

  9. FFmpeg的H.264解码器源代码简单分析:解析器(Parser)部分

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  10. eclipse无法连接genymotion+Unable to start the Genymotion virtual device

    八月的开头,带着希望和期待,小编继续着实习之路,闭眼呼吸,阳光勾勒微笑,做Android项目,真心想吐槽一下eclipse中的虚拟机,那速度真叫一个慢啊,她肯定是属乌龟的,要不就是蜗牛,这个让小编很是 ...