这个是资源的目录参考(看的时候一目了然):
首先是布局文件:
效果图:
代码部分:
activity_main.xml
类MainActivity.java代码:
package org.dyb.file;import org.dyb.service.FileService;import android.os.Bundle;import android.os.Environment;import android.app.Activity;import android.content.Context;import android.util.Log;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;public class MainActivity extends Activity { private EditText fileName;//文件名编辑器 private EditText fileContent;//文件内容编辑器 private Button save;//保存按钮 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //从R中获取文件名资源 fileName=(EditText) findViewById(R.id.fileNameEdit); //从R中获取文件内容资源 fileContent=(EditText) findViewById(R.id.fileContentEdit); //保存按钮资源获取 save=(Button) findViewById(R.id.saveBtn); //设置单击事件进行文件保存,使用内部类接口实现 save.setOnClickListener(new SaveOnclick()); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } //设置单击事件进行文件保存,使用内部类接口实现 private class SaveOnclick implements View.OnClickListener{ @Override public void onClick(View v) { String fileNameString=fileName.getText().toString(); String fileContentString=fileContent.getText().toString(); //自定义FileService类并添加save方法,需要传入content FileService fs=new FileService(MainActivity.this); try{ //将文件保存在程序目录中 fs.save(fileNameString, fileContentString); //将文件保存在SD卡中,去掉注释便可用 if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ fs.saveToSDCard(fileNameString, fileContentString); }else{ Toast.makeText(getApplicationContext(), "SD卡不存在或者写保护", Toast.LENGTH_SHORT).show(); } Toast.makeText(getApplicationContext(), R.string.success, Toast.LENGTH_SHORT).show(); }catch(Exception e){ Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_SHORT).show(); } } } }自定义的FileService类:
代码如下:文件默认写入程序的files中(文件一般在目录的data/data/程序包名/files/文件名,如果使用真机做测试,如果手机没有root并且该文件权限没有进行可读写设置,在eclipse中的DDMS中是打不开data目录的)
package org.dyb.service;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(){ } public FileService(Context context){ this.context=context; } //保存到SD卡 public void saveToSDCard(String fileNameString,String fileContentString) throws Exception{ //Environment.getExternalStorageDirectory()获取系统SD卡目录 File file=new File(Environment.getExternalStorageDirectory(),fileNameString); FileOutputStream outStream=new FileOutputStream(file); outStream.write(fileContentString.getBytes()); outStream.close(); } public void save(String fileNameString,String fileContentString) throws Exception{ //文件输出流 //其中两个参数一个是文件名一个是文件的权限,Context.MODE_PRIVATE代表只允许本程序读写 FileOutputStream outStream=context.openFileOutput(fileNameString,Context.MODE_PRIVATE); //以字节流传入 outStream.write(fileContentString.getBytes()); outStream.close(); } public String read(String fileNameString)throws Exception{ FileInputStream inStream=context.openFileInput(fileNameString); //内存字节数组输出流,主要先将每次读取的字节流存入到内存中然后在进行输出 ByteArrayOutputStream outStream=new ByteArrayOutputStream(); //每次读取1024 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); }}测试类:FTest.java,主要测试文件的读取,
代码如下:
package org.dyb.test;import org.dyb.service.FileService;import android.test.AndroidTestCase;import android.util.Log;public class FTest extends AndroidTestCase { public void testread()throws Exception{ FileService fs=new FileService(this.getContext()); Log.i("junit", fs.read("d.txt"));//文件名,自己可以修改我保存文件的时候用的是d.txt }}
然后在AndroidManifest.xml进行配置单元测试: 在日志输出过滤后就可以看到刚刚输入保存文件的内容