Android游戏编程之文件处理


戏编程肯定不光只是用手机内存还要访问外部存储空间,主要是访问SD卡。先从读取资源文件开始。

我们知道assets/和res/文件夹用于存放可在应用程序中的使用文件。

assets/用于存储各种应用程序中需要的文件(例如配置文件或音频文件等),这些文件会打包在Android应用程序中。

res/包含应用程序所需的各种资源文件,如icons、用于国际化的字符串文件和用于界面布局的XML文件。它们同样打包于应用文件中。

在这里我们不使用res/文件夹,因为它对我们构造文件集存在限制。而assets/目录才是我们存放的地方,无论如何层次结构的文件夹都可以。

Assets/文件夹中的文件通过一个AssetManager类显示出来,我们可以在应用程序中引用该管理器,如下所示:

AssetManager assetManager = context.getAssets();

一旦我们得到AssetManager,就可以容易地打开文件:

InputStream inputStream = assetManager.open("dir/dir2/filename.txt");

该方法将返回一个普通Java输入流InputStream,通过它我们可以读取任何类型的文件。AssetManager.open()方法的唯一参数是相对于asset目录的文件名,如果路径为dir/dir2/filename.txt,那么在Eclipse里就是assets/dir/dir2/filename.txt。

现在我们从assets/目录下的一个texts子目录来加载txt文件并将其显示在TextView中。

代码如下:

package org.example.ch04_android_basics;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

import android.app.Activity;
import android.content.res.AssetManager;
import android.os.Bundle;
import android.widget.TextView;

public class AssetsTest extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  TextView textView = new TextView(this);
  setContentView(textView);
 
  AssetManager assetManager = getAssets();
  InputStream inputStream = null;
 
  try{
   inputStream = assetManager.open("texts/myawesometext.txt");
   String text = loadTextFile(inputStream);
   textView.setText(text);
  }catch(IOException e){
   textView.setText("Couldn't load file");
  }finally{
   if(inputStream != null)
    try{
     inputStream.close();
    }catch(IOException e){
     textView.setText("Couldn't close file");
    }
  }
 }
 
 public String loadTextFile(InputStream inputStream) throws IOException{
  ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
  byte[] bytes = new byte[4096];
  int len = 0;
  while((len = inputStream.read(bytes)) > 0)
   byteStream.write(bytes, 0, len);
  return new String(byteStream.toByteArray(), "UTF-8");
 }
 
}

运行效果如下:

这里用了一个小方法loadTextFile(),用于从InputStream中读取所有字节并将所有字节转换成字符串返回,并采用UTF-8编码。

  • 1
  • 2
  • 下一页

相关内容