android文件讀寫

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);
 

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *