Android中对操作的文件主要可以分为:File、XML、SharedPreference。
这篇博客主要介绍对File的操作:
1、MainActivity
package com.example.filetest;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText et_name;
private EditText et_content;
private Button sdBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
et_name = (EditText) findViewById(R.id.nameET);
et_content = (EditText) findViewById(R.id.contentET);
sdBtn = (Button) findViewById(R.id.sdcBT);
}
@Override
protected void onResume() {//当界面切换到前台是执行这个方法...
super.onResume();
//根据SD卡的状态设置按钮是否可用
if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
sdBtn.setEnabled(false);
}else{
sdBtn.setEnabled(true);
}
}
public void onClick(View view){
String name = et_name.getText().toString();
String content = et_content.getText().toString();
FileService service = new FileService(this);
try{
switch (view.getId()) {
case R.id.romBT:
System.out.println("--------->保存到rom中");
service.saveToRom(name,content);
break;
case R.id.sdcBT:
System.out.println("--------->保存到SD卡中");
service.saveToSD(name,content);
break;
}
Toast.makeText(getApplicationContext(), "保存成功", 1).show();
}catch(Exception e){
e.printStackTrace();
Toast.makeText(getApplicationContext(), "保存失败", 1).show();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
2、FileService
package com.example.filetest;
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 saveToSD(String name, String content) throws Exception{
/**
* 创建输出流指定SD卡所在的位置
* Environment.getExternalStorageDirectory():获取SD卡的位置,为/mnt/sdcard
*
*/
FileOutputStream fos = new FileOutputStream(Environment.getExternalStorageDirectory() + "/" + name);
fos.write(content.getBytes());
fos.close();
}
public void saveToRom(String name, String content) throws Exception{
/**
* 如果打开成功,会在/data/data/包名/下创建爱你一个files目录,并把文件放在里面
*
* Context.MODE_PRIVATE: 只有自己能访访问所创建的文件
* Context.MODE_WORLD_READABLE : 全世界都可以读,也就是说,谁都可以读
* Context.MODE_WORLD_WRITEABLE : 全世界都可以写,也就是说,谁都可以写.
* Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE: 全世界都可以进行读写...
* Context.MODE_APPEND: 私有 && 只能追加
*
* 创建的时候设置成了Context.MODE_PRIVATE,这时候,别的程序想读想写都不可以了,只能是他自己进行读写...
*/
FileOutputStream fos = context.openFileOutput(name, Context.MODE_WORLD_READABLE);//打开 /data/data/应用的报名/的一个文件
fos.write(content.getBytes());//往ROM中写内容不需要权限
fos.close();
}
}
3、FileTest(用于测试)
package com.example.filetest;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import android.content.Context;
import android.test.AndroidTestCase;
public class FileTest extends AndroidTestCase {
/**
* 自己读(正常结果是:可以成功).用来测试Context.MODE_PRIVATE是否正确作用
* @throws Exception
*/
public void testRead() throws Exception{
FileInputStream fis = getContext().openFileInput("wr.txt");
// FileInputStream in = new FileInputStream("/data/data/com.exmaple.filetest/files/hjd.txt");//这种写法和上面那种写法是等价的
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
while((len = fis.read(buffer)) != -1){
baos.write(buffer,0,len);
}
fis.close();
baos.close();
String content = new String(baos.toByteArray());
System.out.println("---->content: " + content);
}
public void testWrite() throws Exception{
FileOutputStream fos = new FileOutputStream("/data/data/com.example.filetest/files/hjd.txt");
String content = "hahahahah";
fos.write(content.getBytes());
fos.close();
}
}
二、
Context的几种MODE其实可以从DDMS中的/data/data/应用名/files/文件可以看到其效果
源码下载:http://download.csdn.net/detail/caihongshijie6/7613405