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