歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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編碼。

Copyright © Linux教程網 All Rights Reserved