在手机上有两个存储位置
1 手机内部存储
2 SD卡
文件操作模式:
是否允许外部访问?
文件以覆盖/追加方式写?
- 手机内存读写
//保存文件到手机内存 public void save(String fileName,String content) throws IOException{ FileOutputStream fos = context.openFileOutput("a.txt", Context.MODE_PRIVATE); fos.write(content.getBytes()); fos.close(); }
**Context.MODE_PRIVATE 只允许本应用访问,覆盖方式
getBytes()默认使用UTF-8
// 从手机内存读取文件 public String read(String fileName) throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 向内存输入字节数据的流 FileInputStream fis = context.openFileInput(fileName); byte[] buffer = new byte[1024]; int len = 0; while ((len = fis.read(buffer)) != -1) { baos.write(buffer, 0, len); } byte[] data = baos.toByteArray(); return data.toString(); }
**文件默认保存和读取位置:/data/data/<包>/files
文件操作模式
Context.MODE_PRIVATE:(默认)只能被本应用访问,覆盖原文件
Context.MODE_APPEND:追加
Context.MODE_WORLD_READABLE当前文件可被其他文件读取
Context.MODE_WORLD_WRITEABLE... 可被其他文件写入
- SD卡读写
// 判断SD卡状态,插入可读写 if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { service.saveToSDCard(fileName, content); } else { // sdcard不存在时,保存到手机内存 service.save(fileName, content); } //保存文件到SD卡 public void saveToSDCard(String fileName, String content) throws IOException{ File file = new File(Environment.getExternalStorageDirectory(),fileName); FileOutputStream fos = new FileOutputStream(file); fos.write(content.getBytes()); fos.close(); }
权限:
从sd卡读取数据不需要权限
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
**android 2.2以前 /sdcard 以后 /mnt/sdcard
不要使用绝对路径 :Environment.getExternalStorageDirectory()
时间: 2024-10-24 15:30:31