標籤:
Android中檔案儲存體的操作:
1.Activity的openFileOutput()方法可以把資料輸出到檔案中
2.建立的檔案儲存在/data/data/<package name>/files目錄
3.實現過程與在java中儲存資料到檔案中是一樣的
<!-- 在SD卡中建立與刪除檔案許可權 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 向SD卡寫入資料許可權 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
public class MainActivity extends Activity{ protected void onCreat(Bundle savedInstanceState){ super.onCreat(savedInstanceState); setContentView(R.layout.activity_main); File file=new File("/mnt/sdcard/test"); //建立檔案 if(!file.exists()){ //判斷檔案是否存在 try{ file.createNewFile(); //檔案不存在就建立它 }catch(IOException e){ e.printStackTrace(); } }else{ Toast.makeText(MainActivity.this,"檔案已存在",1000).show(); } //file.delete(); //刪除檔案 }}
1.目錄結構。this.getFilesDir().當前程式預設的資料存放區目錄
2.this.getCacheDir(),預設的快取檔案的存放位置,不太重要的建立使用,記憶體不足的時候,系統會自動刪除app中cache目錄的資料
3.this.getDir("xch",MODE_PRIVATE);/data/data/<包名>/app_xch
4.this.getExternalCacheDir(),外部的儲存位置,app卸載後會自動刪除。
5.如果開發人員不遵守不把資料放入data/data/<包名>或者/mnt/sdcard/Android/data/<包名>,卸載不會清除,會造成所謂的資料垃圾。
Demo:
package com.example.filereadwrite;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;public class MainActivity extends AppCompatActivity implements View.OnClickListener { private EditText content; private Button btn_SaveRead; private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); content=(EditText) findViewById(R.id.et); btn_SaveRead=(Button) findViewById(R.id.btn_SaveRead); tv=(TextView) findViewById(R.id.tv); btn_SaveRead.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.btn_SaveRead: writeFile(content.getText().toString()); tv.setText(readFile()); break; } } /** * 將內容寫入檔案 * @param content */ public void writeFile(String content){ try { FileOutputStream fos=openFileOutput("text.txt",MODE_PRIVATE); fos.write(content.getBytes()); fos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 將檔案內容讀出 */ public String readFile(){ String content=""; try { FileInputStream fis=openFileInput("text.txt"); ByteArrayOutputStream baos=new ByteArrayOutputStream();//可以捕獲記憶體緩衝區的資料,轉換成位元組數組 int len=0; byte[] buffer=new byte[1024]; while((len=fis.read(buffer))!=-1){ baos.write(buffer,0,len); } content=baos.toString(); fis.close(); baos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return content; }}
注: FileOUtputStream fos= openOutoput(檔案名稱,存取權限);
fos.write(寫入的二進位檔案);
byte [] buffer = new byte[1024];// 最多可存1024位元組
baos.write(buffer, 0, len);// 0表示位移量為0
Android學習總結——檔案儲存