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

介绍:文件处理在不同平台的文件管理是略有差异的

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

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

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

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

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

1 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  • iOS:在iOS中所有文件类型暂不可用。
  • Javascript或WebGL:

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

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

  • 在Libgdx中的文件代表了一个FileHandle类的实例,一个FileHandle有一个指定了文件存储位置的类型。
Type Descrption Desktop Android HTML5 ios
Classpath read-only Yes Yes NO Yes
Internal read-only Yes Yes Yes Yes
Local read-write Yes Yes No Yes
External read-write Yes Yes No Yes
Absolute 绝对路径,尽量少用 Yes Yes No Yes
    • 对于绝对路径和Classpath,通常用于桌面程序的路径,使用顺序应该像下面这样:
    1. Internal Files:与程序一起打包的所有 assets 下的文件都是内部文件(Internal Files)
    2. Local Files :如果您需要写一些小文件,如游戏的状态,使用 local Files.这些都是一般私有到应用程序中。
    3. External Files:如果你想写一些大文件,例如截图或者下载好的文件,可以存储到External Files,应该注意的是,外部文件是不稳定的,用户可以删除或者移动你写出的文件。
  • 检查存储可用性和路径
  • 你可以通过一下文件模型查询可用信息:

    • 1 boolean isExtAvailable =Gdx.files.isExternalStorageAvailable();
      2 boolean isLocAvailable =Gdx.files.isLocalStorageAvailable();
  • 还可以像这样查询文件的根路径:
    • 1 String extRoot =Gdx.files.getExternalStoragePath();
      2 String locRoot =Gdx.files.getLocalStoragePath();
    • 获取文件句柄
    • 1 FileHandle handle =Gdx.files.internal("data/myfile.txt");
      2 FileHandle handle =Gdx.files.classpath("myfile.txt");//将位于项目目录下
      3 FileHandle handle =Gdx.files.external("myfile.txt");//位于用户home目录,windows C:\User   linux  macos   /user/<user>/myfile.txt
      4 FileHandle handle =Gdx.files.absolute("/some_dir/subdir/myfile.txt");//获取绝对路径的文件
    1. 检查文件存在、检查是否是目录:
    2. 1 boolean exists =Gdx.files.external("doitexist.txt").exists();
      2 boolean isDirectory =Gdx.files.external("test/").isDirectory();
    1. 列出文件目录也是非常简单
    2. 1 FileHandle[] files =Gdx.files.local("mylocaldir/").list();
      2 for(FileHandle file: files) {
      3     // do something interesting here
      4 }
    1. 我们还可以同过文件获取父文件或子文件的句柄  
    2. 1 FileHandle parent =Gdx.files.internal("data/graphics/myimage.png").parent();
      2 FileHandle child =Gdx.files.internal("data/sounds/").child("myaudiofile.mp3");
    1. 从文件中读取内容:
1 FileHandle file =Gdx.files.internal("myfile.txt");
2 String text = file.readString();
3 //获取二进制数据
4 FileHandle file =Gdx.files.internal("myblob.bin");
5 byte[] bytes = file.readBytes();
    1. 写内容到文件中
    2. 1 FileHandle file =Gdx.files.local("myfile.txt");
      2 file.writeString("My god, it‘s full of stars", false);
      3 //二进制文件
      4 FileHandle file =Gdx.files.local("myblob.bin");
      5 file.writeBytes(newbyte[] { 20, 3, -2, 10 }, false);
    1. 删除、复制、重命名和移动文件/目录
    2. 1 FileHandle from =Gdx.files.internal("myresource.txt");
      2 from.copyTo(Gdx.files.external("myexternalcopy.txt"));
      3 Gdx.files.external("myexternalcopy.txt").rename("mycopy.txt");
      4 Gdx.files.external("mycopy.txt").moveTo(Gdx.files.local("mylocalcopy.txt"));
      5 Gdx.files.local("mylocalcopy.txt").delete();

      原文由博主 乐智 编辑撰写,版权归博主所有。

      原文地址 http://www.dtblog.cn/1134.html 转载请注明出处!

时间: 2024-10-13 11:40:40

【开源java游戏框架libgdx专题】-07-文件处理的相关文章

【开源java游戏框架libgdx专题】-01-libgdx介绍

libgdx是一款开源的java游戏框架,而且还实现了Desktop/Android/BlackBerry/iOS/HTML5这些些平台的跨平台开发.官方网址:https://libgdx.badlogicgames.com/ 框架项目截图(Eclipse需要安装Gradle): libgdx项目采用工具自动生成项目(可以自己配置扩展): 原文由博主 乐智 编辑撰写,版权归博主所有. 原文地址 http://www.dtblog.cn/1086.html 转载请注明出处!

【开源java游戏框架libgdx专题】-05-模块描述与上下文

模块描述(Modules overview) Input:为所有的平台提供一个统一的输入模型和处理程序. 获取触摸示例: 1 if (Gdx.input.isTouched()) { 2 System.out.println("Input occurred at x="+Gdx.input.getX() +", y="+Gdx.input.getY()); 3 } Graphics:能够使用硬件提供的OpenGL ES在屏幕上绘制图片 获取OpenGL API 2.

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

libgdx虽然是由美国人Mario Zechner(即BadlogicGames)写的开源引擎,由于Libgdx底层是用OpenGL实现的,所以Libgdx是可以支持中文的,在libgdx中的汉字都是通过贴图的方式显示,使用BitmapFont和SpriteBatch组合来完成文字的绘制,构造BitmapFont时需要一个描述文字构成的fnt文件,和一个提供文字图片的png文件.因此显示中文,归根结底就是读取一个包含中文信息的.fnt文件和相应的.png文件并展示出来的问题. 使用hiero.

【开源java游戏框架libgdx专题】-04-接口介绍及生命周期

在核心项目中包含6大与操作系统交互的接口,每个后端都实现了这6大接口. Application:运行应用程序并通知API的客户端应用程序级别的事件,提供日志记录设施和查询方法,例如,内存使用. Files:公开平台的底层文件系统 Input:接收用户的输入——鼠标.键盘.触摸或其他输入设备,支持轮询和事件处理驱动. Net:提供了通过HTTP / HTTPS以跨平台的方式获取资源的手段,以及创建TCP服务器和客户端套接字. Audio:提供播放的声音效果和音乐流媒体以及直接访问的PCM音频输入/

【开源java游戏框架libgdx专题】-03-项目开发与调试

创建libgdx项目 下载项目配置工具 gdx-setup.jar 生成项目 导入Eclipse File -> Import -> Gradle -> Gradle Project 选择生成的项目,然后点击 build model 第一次的时间可能有点长   像这样就可以了  然后点击finish 找到生成的项目,找到main方法的类运行一下 bingo 用于自动打包项目的是一个叫gradlew的文件,windows是gradlew.bat  执行如图命令: 收集了其他类型项目打包的命

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

支持libGDX的地图编辑器有很多种,其中比较常用的工具为Tiled地图工具.Tiled是一款非常好用的地图编辑器.下载地址:http://www.mapeditor.org TiledMap类: 又称瓦片地图类,主要用于解析地图编辑器所保存的地图文件. 常用方法: dispose():销毁当前地图中的所有纹理 getLayers():获取当前地图中的所有图层,返回值为MapLayers类型变量 getProperties():获取当前地图的所有属性,返回值为MapProperties类型变量

【开源java游戏框架libgdx专题】-11-核心库-演员类

演员类,又称为Actor类,是libgdx开发中最基本的元素,可以被继承. 演员类,从OpenGL类的角度来理解,可以称为一个二维场景节点.它本身具有位置(postion).边界矩形(类似Retangle).锚点(origin).缩放比例(scale).旋转(rotation).颜色(color)等属性 常用方法: act(float delta):更新游戏中的演员的状态,常在render中调用,参数一般传入游戏渲染间隔时间. addAction(Action action):添加动作(Acti

【开源java游戏框架libgdx专题】-10-核心库-Viewport

Viewport类,又称为视口类,主要负责管理游戏相机,处理游戏世界坐标与布景层坐标的换算关系.在移动端开发,不像PC端容易.因为要适配不同分辨率的设备.libgdx处理不同的设备屏幕时,用视口处理舞台与相机的关系.主要使用其子类. 7种Viewport类型: StretchViewport:伸展视口,支持设备宽度与高度比改变,根据参数内的宽度和高度来自动适应不同设备的屏幕 FitViewport:会保持自身参数内的宽度与高度比,并以此为依据尽量拉伸类适应屏幕.可能出现黑边. FillViewp

【开源java游戏框架libgdx专题】-14-系统控件-Skin类

Skin类主要用于存储用户界面的资源,该资源主要用于窗口部件.这些资源也包括纹理图片.位图画笔.颜色等内容.方便创建游戏组件,同时使用Skin也可以批量的粗略处理一些窗口部件. test.json 1 { 2 com.badlogic.gdx.graphics.Color: { 3 green: { a: 1, b: 0, g: 1, r: 0 }, 4 white: { a: 0, b: 1, g: 1, r: 1 }, 5 red: { a: 1, b: 0, g: 0, r: 1 }, 6