1.openFileInput和openFileOutput的使用
文件的使用,注意最后要用finally給關閉掉。
openFileOutput:(寫入文件,如果沒有文件名可以創(chuàng)建,這里不需要判斷是否有這個文件)---> 返回FileOutputStream
openFileInput:(讀取文件,沒有文件名會保存,debug的時候會看到,不影響ui)---> FileInputStream
保存文件:
第一個參數(shù):文件名(不包含路徑)默認為data/data/包名/files/下
第二個參數(shù):文件操作模式,下面是寫入的四種模式
MODE_APPEND:即向文件尾寫入數(shù)據(jù)(文件已存在就追加)
MODE_PRIVATE:即僅打開文件可寫入數(shù)據(jù)(默認模式,相同文件名會覆蓋內容)
MODE_WORLD_READABLE:所有程序均可讀該文件數(shù)據(jù)(棄用)
MODE_WORLD_WRITABLE:即所有程序均可寫入數(shù)據(jù)(棄用)
private void savePackageFile(Context context,String filename,String text) {
//String msg = tvSaveMessage.getText().toString() + " \n";
FileOutputStream outputStream = null;
BufferedWriter writer = null;
try {
outputStream = context.openFileOutput(filename, Context.MODE_APPEND);
writer = new BufferedWriter(new OutputStreamWriter(outputStream));
writer.write(text);
//outputStream.write(msg.getBytes());
//outputStream.flush();
//outputStream.close();
} catch (Exception e) {
e.printStackTrace();
} finally{
if(writer != null){
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
讀取文件:
參數(shù):文件名(讀取包名下files文件夾下的文件)
返回值:FileInputStream
private void readSaveFile(Context context,String filename) {
FileInputStream inputStream = null;
BufferedReader bufferedReader = null;
StringBuilder stringBuilder = new StringBuilder();
try {
inputStream = context.openFileInput(filename);
bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String line = "";
while ((line = bufferedReader.readLine()) != null){
stringBuilder.append(line);
}
// byte temp[] = new byte[1024];
// StringBuilder sb = new StringBuilder("");
// int len = 0;
// while ((len = inputStream.read(temp)) > 0){
// sb.append(new String(temp, 0, len));
// }
// inputStream.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if(bufferedReader != null){
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
2.SD卡讀取和寫入—路徑:/storage/sdcard0/
######SD卡權限;
<!-- 在SDCard中創(chuàng)建與刪除文件權限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard寫入數(shù)據(jù)權限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
往SD卡寫入文件的方法
public void savaFileToSD(String filename, String filecontent) throws Exception {
//如果手機已插入sd卡,且app具有讀寫sd卡的權限
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
filename = Environment.getExternalStorageDirectory().getCanonicalPath() + "/" + filename;
//這里就不要用openFileOutput了,那個是往手機內存中寫數(shù)據(jù)的
FileOutputStream output = new FileOutputStream(filename);
output.write(filecontent.getBytes());
//將String字符串以字節(jié)流的形式寫入到輸出流中
output.close();
//關閉輸出流
} else Toast.makeText(context, "SD卡不存在或者不可讀寫", Toast.LENGTH_SHORT).show();
}
//讀取SD卡中文件的方法
//定義讀取文件的方法:
public String readFromSD(String filename) throws IOException {
StringBuilder sb = new StringBuilder("");
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
filename = Environment.getExternalStorageDirectory().getCanonicalPath() + "/" + filename;
//打開文件輸入流
FileInputStream input = new FileInputStream(filename);
byte[] temp = new byte[1024];
int len = 0;
//讀取文件內容:
while ((len = input.read(temp)) > 0) {
sb.append(new String(temp, 0, len));
}
//關閉輸入流
input.close();
}
return sb.toString();
}
3.讀取raw和assets文件夾下的文件
res/raw:文件會被映射到R.java文件中,訪問的時候直接通過資源ID即可訪問,而且 他不能有目錄結構,就是不能再創(chuàng)建文件夾
assets:不會映射到R.java文件中,通過AssetManager來訪問,能有目錄結構,即可以自行創(chuàng)建文件夾
讀取文件資源
raw:
InputStream is =getResources().openRawResource(R.raw.filename);
讀取文件資源
assets:
AssetManager am = getAssets();
InputStream is = am.open("filename");
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。