(Android review)檔案的讀寫(對File的操作),androidreview
Android中對操作的檔案主要可以分為:File、XML、SharedPreference。
這篇部落客要介紹對File的操作:
1、MainActivity
package com.example.filetest;import android.os.Bundle;import android.os.Environment;import android.app.Activity;import android.view.Menu;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;public class MainActivity extends Activity {private EditText et_name;private EditText et_content;private Button sdBtn;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);et_name = (EditText) findViewById(R.id.nameET);et_content = (EditText) findViewById(R.id.contentET);sdBtn = (Button) findViewById(R.id.sdcBT);}@Overrideprotected void onResume() {//當介面切換到前台是執行這個方法...super.onResume();//根據SD卡的狀態設定按鈕是否可用if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){sdBtn.setEnabled(false);}else{sdBtn.setEnabled(true);}}public void onClick(View view){String name = et_name.getText().toString();String content = et_content.getText().toString();FileService service = new FileService(this);try{switch (view.getId()) {case R.id.romBT:System.out.println("--------->儲存到rom中");service.saveToRom(name,content);break;case R.id.sdcBT:System.out.println("--------->儲存到SD卡中");service.saveToSD(name,content);break;}Toast.makeText(getApplicationContext(), "儲存成功", 1).show();}catch(Exception e){e.printStackTrace();Toast.makeText(getApplicationContext(), "儲存失敗", 1).show();}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}
2、FileService
package com.example.filetest;import java.io.FileOutputStream;import android.content.Context;import android.os.Environment;public class FileService {private Context context;public FileService(Context context){this.context = context;}public void saveToSD(String name, String content) throws Exception{/** * 建立輸出資料流指定SD卡所在的位置 * Environment.getExternalStorageDirectory():擷取SD卡的位置,為/mnt/sdcard * */FileOutputStream fos = new FileOutputStream(Environment.getExternalStorageDirectory() + "/" + name);fos.write(content.getBytes());fos.close();}public void saveToRom(String name, String content) throws Exception{/** * 如果開啟成功,會在/data/data/包名/下建立愛你一個files目錄,並把檔案放在裡面 * * Context.MODE_PRIVATE: 只有自己能訪訪問所建立的檔案 * Context.MODE_WORLD_READABLE : 全世界都可以讀,也就是說,誰都可以讀 * Context.MODE_WORLD_WRITEABLE : 全世界都可以寫,也就是說,誰都可以寫. * Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE: 全世界都可以進行讀寫... * Context.MODE_APPEND: 私人 && 只能追加 * * 建立的時候設定成了Context.MODE_PRIVATE,這時候,別的程式想讀想寫都不可以了,只能是他自己進行讀寫... */FileOutputStream fos = context.openFileOutput(name, Context.MODE_WORLD_READABLE);//開啟 /data/data/應用的報名/的一個檔案fos.write(content.getBytes());//往ROM中寫內容不需要許可權fos.close();}}
3、FileTest(用於測試)
package com.example.filetest;import java.io.ByteArrayOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import android.content.Context;import android.test.AndroidTestCase;public class FileTest extends AndroidTestCase {/** * 自己讀(正常結果是:可以成功).用來測試Context.MODE_PRIVATE是否正確作用 * @throws Exception */public void testRead() throws Exception{FileInputStream fis = getContext().openFileInput("wr.txt");//FileInputStream in = new FileInputStream("/data/data/com.exmaple.filetest/files/hjd.txt");//這種寫法和上面那種寫法是等價的ByteArrayOutputStream baos = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len;while((len = fis.read(buffer)) != -1){baos.write(buffer,0,len);}fis.close();baos.close();String content = new String(baos.toByteArray());System.out.println("---->content: " + content);}public void testWrite() throws Exception{FileOutputStream fos = new FileOutputStream("/data/data/com.example.filetest/files/hjd.txt");String content = "hahahahah";fos.write(content.getBytes());fos.close();}}
二、
Context的幾種MODE其實可以從DDMS中的/data/data/應用程式名稱/files/檔案可以看到其效果
源碼下載:http://download.csdn.net/detail/caihongshijie6/7613405
android的file:///路徑在專案檔中的什地方?
通過點擊Eclipse菜單“Window”-“Show View”-“Other”,在交談視窗中展開android檔案夾,選擇下面的File Explorer視圖,然後在File Explorer視圖中展開/data/data/<package name>/files目錄就可以看到該檔案。
android真機調試下檔案讀寫存放在哪兒?虛擬機器時路徑為/data/data/<package name>/file/filename
真機沒有root的話 上面的檔案夾DDMS可是看不了的
當然應用可以往裡面寫
調試 不如申請個sdcard許可權 放到 /mnt/sdcard/filename(2.2以上) /sdcard/filename(2.1及以下)