分享

文件的保存与读取

 IceCivet 2014-10-31

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捕获抛出的异常,没有异常,返回保存成功,否则,保存失败。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多