1. 程式人生 > >從resource中的raw資料夾中獲取檔案並讀取資料(資原始檔只能讀不能寫)

從resource中的raw資料夾中獲取檔案並讀取資料(資原始檔只能讀不能寫)

轉載:http://blog.sina.com.cn/s/blog_4d25c9870100qpax.html

一、 resource中的raw資料夾中獲取檔案並讀取資料(資原始檔只能讀不能寫)

String res = "";

try{

InputStream in = getResources().openRawResource(R.raw.bbi);

//\Test\res\raw\bbi.txt,

 int length = in.available();

 byte [] buffer = new byte[length];

 in.read(buffer);

 //res = EncodingUtils.getString(buffer, "UTF-8");

 //res = EncodingUtils.getString(buffer, "UNICODE");

 res = EncodingUtils.getString(buffer, "BIG5");

 //bbi.txt的編碼型別選擇合適的編碼,如果不調整會亂碼

 in.close();

 }catch(Exception e){

 e.printStackTrace();

 }

myTextView.setText(res);//把得到的內容顯示在TextView

二、 asset中獲取檔案並讀取資料(資原始檔只能讀不能寫)

String fileName = "yan.txt"

; //檔名字

String res="";

try{

 InputStream in = getResources().getAssets().open(fileName);

 // \Test\assets\yan.txt這裡有這樣的檔案存在

 int length = in.available();

byte [] buffer = new byte[length];

in.read(buffer);

res = EncodingUtils.getString(buffer, "UTF-8");

}catch(Exception e){

 e.printStackTrace();

 }

三、 sdcard中去讀檔案,首先要把檔案通過\android-sdk-windows\tools\adb.exe把本地計算機上的檔案copysdcard上去,adb.exe push e:/Y.txt /sdcard/, 不可以用adb.exe push e:\Y.txt \sdcard\同樣: 把模擬器上的檔案copy到本地計算機上用: adb pull ./data/data/com.tt/files/Test.txt e:/

String fileName = "/sdcard/Y.txt";

//也可以用String fileName = "mnt/sdcard/Y.txt";

String res="";

try{

FileInputStream fin = new FileInputStream(fileName);

//FileInputStream fin = openFileInput(fileName);

//用這個就不行了,必須用FileInputStream

 int length = fin.available();

 byte [] buffer = new byte[length];

 fin.read(buffer);

 res = EncodingUtils.getString(buffer, "UTF-8");

 fin.close();

 }catch(Exception e){

  e.printStackTrace();

}

myTextView.setText(res);

四、 寫檔案, 一般寫在\data\data\com.test\files\裡面,開啟DDMS檢視file explorer是可以看到模擬器檔案存放目錄的結構的

 String fileName = "TEST.txt";

 String message = "FFFFFFF11111FFFFF" ;

writeFileData(fileName, message);

 public voidwriteFileData(String fileName,String message){

  try{

  FileOutputStream fout =openFileOutput(fileName, MODE_PRIVATE);

  byte [] bytes = message.getBytes();

  fout.write(bytes);

  fout.close();

  }

  catch(Exception e){

  e.printStackTrace();

  }

 }

五、 寫, data/data/目錄(相當AP工作目錄)上的檔案,openFileOutput

 //寫檔案在./data/data/com.tt/files/下面

 public voidwriteFileData(String fileName,String message){

  try{

  FileOutputStream fout =openFileOutput(fileName, MODE_PRIVATE);

  byte [] bytes = message.getBytes();

  fout.write(bytes);

  fout.close();

  }

  catch(Exception e){

  e.printStackTrace();

  }

 }

//-------------------------------------------------------

//讀檔案在./data/data/com.tt/files/下面

 public String readFileData(String fileName){

  String res="";

  try{

  FileInputStream fin = openFileInput(fileName);

  int length = fin.available();

  byte [] buffer = new byte[length];

  fin.read(buffer);

  res = EncodingUtils.getString(buffer, "UTF-8");

  fin.close();

  }

  catch(Exception e){

  e.printStackTrace();

  }

  return res;

 }

六、 寫, sdcard目錄上的檔案,要用FileOutputStream 不能用openFileOutput

 //寫在/mnt/sdcard/目錄下面的檔案

 public voidwriteFileSdcard(String fileName,String message){

  try{

  //FileOutputStream fout = openFileOutput(fileName, MODE_PRIVATE);

  FileOutputStream fout = newFileOutputStream(fileName);

  byte [] bytes = message.getBytes();

  fout.write(bytes);

  fout.close();

  }

  catch(Exception e){

  e.printStackTrace();

  }

 }

 //讀在/mnt/sdcard/目錄下面的檔案

 public String readFileSdcard(String fileName){

  String res="";

  try{

  FileInputStream fin = new FileInputStream(fileName);

  int length = fin.available();

  byte [] buffer = new byte[length];

  fin.read(buffer);

  res = EncodingUtils.getString(buffer, "UTF-8");

  fin.close();

  }

  catch(Exception e){

  e.printStackTrace();

  }

  return res;

 }

注: openFileOutput是在raw裡編譯過的,FileOutputStream是任何檔案都可以