SharedPreferences的四种操作模式:
Context.MODE_PRIVATE
Context.MODE_APPEND
Context.MODE_WORLD_READABLE
Context.MODE_WORLD_WRITEABLE
Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容
Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件.
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件.
MODE_WORLD_READABLE:表示当前文件可以被其他应用读取.
MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入.
通用操作类。
注意,如果写入SD卡,需要先注册权限:
<!-- 在SDCard中创建与删除文件权限 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <!-- 往SDCard写入数据权限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import android.content.Context; import android.os.Environment; public class FileService { private Context context; public FileService(Context context) { this.context = context; } public void saveToSDCard(String filename, String content)throws Exception { File file = new File(Environment.getExternalStorageDirectory(), filename); FileOutputStream outStream = new FileOutputStream(file); outStream.write(content.getBytes()); outStream.close(); } /** * 保存文件 * @param filename 文件名称 * @param content 文件内容 */ public void save(String filename, String content) throws Exception { //私有操作模式:创建出来的文件只能被本应用访问,其它应用无法访问该文件,另外采用私有操作模式创建的文件,写入文件中的内容会覆盖原文件的内容 FileOutputStream outStream = context.openFileOutput(filename, Context.MODE_PRIVATE); outStream.write(content.getBytes()); outStream.close(); } /** * 保存文件 * @param filename 文件名称 * @param content 文件内容 */ public void saveAppend(String filename, String content) throws Exception {//ctrl+shift+y / x //追加模式:创建出来的文件只能被本应用访问,其它应用无法访问该文件,另外采用私有操作模式创建的文件,写入文件中的内容会覆盖原文件的内容 FileOutputStream outStream = context.openFileOutput(filename, Context.MODE_APPEND); outStream.write(content.getBytes()); outStream.close(); } /** * 保存文件 * @param filename 文件名称 * @param content 文件内容 */ public void saveReadable(String filename, String content) throws Exception { FileOutputStream outStream = context.openFileOutput(filename, Context.MODE_WORLD_READABLE); outStream.write(content.getBytes()); outStream.close(); } /** * 保存文件 * @param filename 文件名称 * @param content 文件内容 */ public void saveWriteable(String filename, String content) throws Exception { FileOutputStream outStream = context.openFileOutput(filename, Context.MODE_WORLD_WRITEABLE); outStream.write(content.getBytes()); outStream.close(); } /** * 保存文件 * @param filename 文件名称 * @param content 文件内容 */ public void saveRW(String filename, String content) throws Exception { FileOutputStream outStream = context.openFileOutput(filename, Context.MODE_WORLD_WRITEABLE + Context.MODE_WORLD_READABLE); outStream.write(content.getBytes()); outStream.close(); } /** * 读取文件内容 * @param filename 文件名称 * @return 文件内容 * @throws Exception */ public String read(String filename) throws Exception { FileInputStream inStream = context.openFileInput(filename); ByteArrayOutputStream outStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while((len = inStream.read(buffer)) != -1){ outStream.write(buffer, 0, len); } byte[] data = outStream.toByteArray(); return new String(data); } }
使用方法:
FileService service = new FileService(getApplicationContext()); try { //判断SDCard是否存在,并且可以读写 if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ service.saveToSDCard(filename, content); Toast.makeText(getApplicationContext(), R.string.success, 1).show(); }else{ Toast.makeText(getApplicationContext(), R.string.sdcarderror, 1).show(); } } catch (Exception e) { Toast.makeText(getApplicationContext(), R.string.fail, 1).show(); e.printStackTrace(); }