android檔案讀寫

來源:互聯網
上載者:User

android檔案的讀寫主要分為兩個方面,一個是將內容寫入本應用的data檔案夾中,另一個是將內容寫入到sdcard中。兩者都使用I/O流的讀寫技術。

下面具體具體介紹這兩方面的內容:

一。將內容寫入本應用中:

[html]
/** 
     * @description:將內容儲存到內建儲存中 
     * @author:Administrator 
     * @return:boolean 
     * @param fileName 
     *            檔案名稱 
     * @param fileContent 
     *            檔案內容 
     * @param context 
     *            內容物件 
     * @return 
     */ 
 
    public static boolean fileSaveApp(String fileName, String fileContent, 
            Context context) { 
        try { 
            // 用android提供的輸出資料流來將內容寫入到檔案中,注意mode的用途 
            FileOutputStream fos = context.openFileOutput(fileName, 
                    context.MODE_APPEND); 
            fos.write(fileContent.getBytes()); 
            fos.close(); 
        } catch (FileNotFoundException e) { 
            e.printStackTrace(); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
        return false; 
    } 

/**
  * @description:將內容儲存到內建儲存中
  * @author:Administrator
  * @return:boolean
  * @param fileName
  *            檔案名稱
  * @param fileContent
  *            檔案內容
  * @param context
  *            內容物件
  * @return
  */

 public static boolean fileSaveApp(String fileName, String fileContent,
   Context context) {
  try {
   // 用android提供的輸出資料流來將內容寫入到檔案中,注意mode的用途
   FileOutputStream fos = context.openFileOutput(fileName,
     context.MODE_APPEND);
   fos.write(fileContent.getBytes());
   fos.close();
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
  return false;
 }
注意android的內容物件context在這個方法中起的的作用(可以用它來開啟一個輸出資料流,或者開啟一個輸入資料流),還有檔案的寫入模式。這裡用的是檔案的追加模式。資料時只可被本應用操作的。

 

二。將資料寫入sdcard中

 

[html]
/** 
     * @description:將內容寫入到sdcard的檔案當中 
     * @author:Administrator 
     * @return:boolean 
     * @param fileName 
     *            檔案名稱 
     * @param fileContent 
     *            檔案內容 
     * @param path 
     *            檔案路徑 
     * @return 
     */ 
 
    public static boolean fileSave(String fileName, String fileContent, 
            File path) { 
        File file = new File(path, fileName); 
        if (!file.exists()) { 
            try { 
                file.createNewFile(); 
            } catch (IOException e) { 
                e.printStackTrace(); 
            } 
        } 
        FileOutputStream fos = null; 
        int count = 0; 
        try { 
            fos = new FileOutputStream(file); 
            count = fileContent.getBytes().length; 
            fos.write(fileContent.getBytes(), 0, count); 
            fos.close(); 
            return true; 
        } catch (FileNotFoundException e) { 
            e.printStackTrace(); 
        } catch (UnsupportedEncodingException e) { 
            e.printStackTrace(); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
        return false; 
    } 

/**
  * @description:將內容寫入到sdcard的檔案當中
  * @author:Administrator
  * @return:boolean
  * @param fileName
  *            檔案名稱
  * @param fileContent
  *            檔案內容
  * @param path
  *            檔案路徑
  * @return
  */

 public static boolean fileSave(String fileName, String fileContent,
   File path) {
  File file = new File(path, fileName);
  if (!file.exists()) {
   try {
    file.createNewFile();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
  FileOutputStream fos = null;
  int count = 0;
  try {
   fos = new FileOutputStream(file);
   count = fileContent.getBytes().length;
   fos.write(fileContent.getBytes(), 0, count);
   fos.close();
   return true;
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (UnsupportedEncodingException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
  return false;
 }
注意這個方法中的path參數指的是sdcard的路徑:=Environment.getExternalStorageDirectory();

注意寫入資料的時候需要判斷sdcard是否存在是否可寫:Environment.getExternalStorageState().equals(
       Environment.MEDIA_MOUNTED);

最後需要注意如果要向sdcard寫入資料必須在manifest.xml加入許可權: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />第一個許可權是指對sdcard可寫,第二個許可權是指可以在sdcard中建立和刪除檔案。

 

最後將從應用的data中讀取資料的方法也寫進來:

 

[html]
/** 
     * @description:讀取本應用data檔案夾中檔案的內容(如果要讀取sdcard中的檔案時一定要去判斷sdcard是否存在,並且是可讀的) 
     * @author:Administrator 
     * @return:String 檔案的內容 
     * @param fileName 
     *            檔案名稱 
     * @param context 
     *            內容物件 
     * @return 
     */ 
 
    public static String readFile(String fileName, Context context) { 
        String str = ""; 
         
            try { 
                FileInputStream fis = context.openFileInput(fileName); 
                ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
                byte[] buffer = new byte[1024]; 
                int len = 0; 
                while ((len = fis.read(buffer)) != -1) { 
                    // 用位元組輸出資料流將讀到的內容寫入到記憶體中 
                    bos.write(buffer, 0, len); 
                } 
                // 將輸出資料流中的資料轉換為String 
                str = new String(bos.toByteArray(), "utf-8"); 
            } catch (FileNotFoundException e) { 
                e.printStackTrace(); 
            } catch (IOException e) { 
                e.printStackTrace(); 
            } 
 
        return str; 
    } 

/**
  * @description:讀取本應用data檔案夾中檔案的內容(如果要讀取sdcard中的檔案時一定要去判斷sdcard是否存在,並且是可讀的)
  * @author:Administrator
  * @return:String 檔案的內容
  * @param fileName
  *            檔案名稱
  * @param context
  *            內容物件
  * @return
  */

 public static String readFile(String fileName, Context context) {
  String str = "";
  
   try {
    FileInputStream fis = context.openFileInput(fileName);
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    byte[] buffer = new byte[1024];
    int len = 0;
    while ((len = fis.read(buffer)) != -1) {
     // 用位元組輸出資料流將讀到的內容寫入到記憶體中
     bos.write(buffer, 0, len);
    }
    // 將輸出資料流中的資料轉換為String
    str = new String(bos.toByteArray(), "utf-8");
   } catch (FileNotFoundException e) {
    e.printStackTrace();
   } catch (IOException e) {
    e.printStackTrace();
   }

  return str;
 }
這裡就不再介紹從sdcard中讀取檔案內容的方法了。

 

 Context.MODE_PRIVATE:為預設操作模式,代表該檔案是私人資料,只能被應用本身訪問,在該模式下,寫入的內容會覆蓋原檔案的內容,如果想把新寫入的內容追加到原檔案中。可以使用Context.MODE_APPEND
Context.MODE_APPEND:模式會檢查檔案是否存在,存在就往檔案追加內容,否則就建立新檔案。
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用來控制其他應用是否有許可權讀寫該檔案。
MODE_WORLD_READABLE:表示當前檔案可以被其他應用讀取;MODE_WORLD_WRITEABLE:表示當前檔案可以被其他應用寫入。
如果希望檔案被其他應用讀和寫,可以傳入:
openFileOutput("itcast.txt", Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);
 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.