读文件
从”/data/data/appName/appPackageName/files”路径读文件
使用Context类的openFileInput(String fileName)方法。
示例:
public String read(String fileName) throws Exception {
try (FileInputStream input = context.openFileInput(fileName)) {
StringBuffer stringBuffer=new StringBuffer();
byte[] buffer=new byte[input.available()];
for (int i = input.read(buffer); i >0; i=input.read(buffer)) {
stringBuffer.append(new String(buffer,0,i));
}
return stringBuffer.toString();
} catch (Exception e) {
throw e;
}
}
从”/resource/raw”路径读文件
使用Resources类的openRawResource(int R.raw.fileId)方法。
示例:
InputStream input = context.getResources().openRawResource(R.raw.fileId);
注意 raw里的文件一般需要使用EncodingUtils.getString(String data,String charset)进行解码,这个目录只能放置单个大小在1MB以内的文件,并且该目录是只读的,不能通过程序写入文件
从”/resource/asset”路径读文件
使用AssetManager类的open(String fileName)方法。
示例:
InputStream input = context.getResources().getAssets().open(String fileName);
注意 asset里的文件一般需要使用EncodingUtils.getString(String data,String charset)进行解码,这个目录只能放置单个大小在1MB以内的文件,并且该目录是只读的,不能通过程序写入文件
从”/mnt/sdcard”路径读文件
sd卡的路径不同版本有所不同,要想兼容可以使用Environment.getExternalStorageDirectory()获取。
读取sd卡文件和以前java文件流操作一样,直接创建FileInputStream或者RandomAccessFile。
示例:
1.
InputStream input =new FileInputStream(Environment.getExternalStorageDirectory()+"/folderPath***/"+fileName);
2.
RandomAccessFile accessFile=new RandomAccessFile(Environment.getExternalStorageDirectory()+"/folderPath***/"+fileName,String accessMode);
注意 sd卡里的文件一般需要使用EncodingUtils.getString(String data,String charset)进行解码,并且需要检查sd卡是否存在
检查sd卡是否存在的代码:
if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
SD card exist and can read with write...
}
写文件
写入文件到”/data/data/appName/appPackageName/files”
使用Context类的openFileOutput(String fileName,int writeMode)方法。
示例:
public void save(String fileName, String fileContent) throws Exception {
try (FileOutputStream output = context.openFileOutput(fileName,
Context.MODE_PRIVATE)) {
output.write(fileContent.getBytes());
} catch (Exception e) {
throw e;
}
}
写入文件到”/mnt/sdcard”
sd卡的路径不同版本有所不同,要想兼容可以使用Environment.getExternalStorageDirectory()获取。
示例:
1.
OuputStream ouput =new FileOuputStream(Environment.getExternalStorageDirectory()+"/folderPath***/"+fileName);
2.
RandomAccessFile accessFile=new RandomAccessFile(Environment.getExternalStorageDirectory()+"/folderPath***/"+fileName,String accessMode);
注意写入文件到sd卡需要在AndroidMainfest.xml 配置权限
在AndroidMainfest.xml 根节点里添加代码:
<!--create delete file permission-->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!--create write file permission-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
注意 ‘uses-permission’ 标签必须在 ‘application’ 标签的之前。写入文件时需要文件如果文件是只读的将抛出一个“open file failed:EACCES (permission denied)”的异常