Android学习第三天 --文件读写操作

读文件

从”/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)”的异常

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值