1.openFileInput和openFileOutput的使用
文件的使用,注意最后要用finally给关闭掉。
openFileOutput:(写入文件,如果没有文件名可以创建,这里不需要判断是否有这个文件)---> 返回FileOutputStream
openFileInput:(读取文件,没有文件名会保存,debug的时候会看到,不影响ui)---> FileInputStream
保存文件:
第一个参数:文件名(不包含路径)默认为data/data/包名/files/下
第二个参数:文件操作模式,下面是写入的四种模式
MODE_APPEND:即向文件尾写入数据(文件已存在就追加)
MODE_PRIVATE:即仅打开文件可写入数据(默认模式,相同文件名会覆盖内容)
MODE_WORLD_READABLE:所有程序均可读该文件数据(弃用)
MODE_WORLD_WRITABLE:即所有程序均可写入数据(弃用)
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();
}
}
}
}
读取文件:
参数:文件名(读取包名下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中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard写入数据权限 -->
<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了,那个是往手机内存中写数据的
FileOutputStream output = new FileOutputStream(filename);
output.write(filecontent.getBytes());
//将String字符串以字节流的形式写入到输出流中
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即可访问,而且 他不能有目录结构,就是不能再创建文件夹
assets:不会映射到R.java文件中,通过AssetManager来访问,能有目录结构,即可以自行创建文件夹
读取文件资源
raw:
InputStream is =getResources().openRawResource(R.raw.filename);
读取文件资源
assets:
AssetManager am = getAssets();
InputStream is = am.open("filename");