android应用文件的保存与读取。 默认的文件夹目录:data\data\package name\files 打开文件夹的四种模式: MODE_PRIVATE 默认操作权限,只能被应用本身访问,写入的内容会覆盖原内容 MODE_APPEND 可被追加到原文件中。 MODE_WORLD_READABLE 允许被其他应用读取 MODE_WORLD_WRITEABLE 允许被其他应用写入 public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button bn=(Button) this.findViewById(R.id.bn); bn.setOnClickListener(new ButtonClick()); } private final class ButtonClick implements View.OnClickListener{ @Override public void onClick(View v) { EditText filename=(EditText) findViewById(R.id.filename); EditText filecontent=(EditText) findViewById(R.id.filecontent); String name=filename.getText().toString(); String content=filecontent.getText().toString(); FileService service=new FileService(getApplicationContext());//获取context try { Toast.makeText(getApplicationContext(), R.string.success, Toast.LENGTH_LONG).show(); service.save(name,content); } catch (IOException e) { Toast.makeText(getApplicationContext(), R.string.success, Toast.LENGTH_LONG).show(); e.printStackTrace(); } } } ----------------------- 将保存操作和读取操作单独写成一个业务类,放在service包里。 public class FileService { private Context context; public FileService(Context context) { this.context = context; } //构造函数获取上下文context /** * 文件保存 * @param name 文件名称 * @param content 文件内容 */ public void save(String name, String content) throws IOException { FileOutputStream outStream= context.openFileOutput(name,Context.MODE_PRIVATE); outStream.write(content.getBytes()); //文件写入的是二进制字节 outStream.close(); //关闭文件输出流 } /** * 读取文件内容 * @param filename 文件名称 * @return String 文件内容 * @throws IOException */ public String read(String filename) throws IOException { FileInputStream inputStream=context.openFileInput(filename); byte[]buffer=new byte[1024]; int len=0; ByteArrayOutputStream outputStream=new ByteArrayOutputStream(); while((len=inputStream.read(buffer))!=-1){ outputStream.write(buffer,0,len); } byte[] data=outputStream.toByteArray(); return new String(data); } 文件的读取没有写到actiity中,写一个test类测试。 ps注意 抛出异常的情况,不要直接在业务类中try catch,把这个异常抛出去。由activity捕获抛出的异常,没有异常,返回保存成功,否则,保存失败。 |
|