歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android游戲編程之文件處理

Android游戲編程之文件處理

日期:2017/3/1 10:02:03   编辑:Linux編程

戲編程肯定不光只是用手機內存還要訪問外部存儲空間,主要是訪問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