博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android文件的保存(本地和SD卡)与读取
阅读量:6820 次
发布时间:2019-06-26

本文共 4374 字,大约阅读时间需要 14 分钟。

  hot3.png

这个是资源的目录参考(看的时候一目了然):

首先是布局文件:

效果图:

代码部分:

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进行配置单元测试:

在日志输出过滤后就可以看到刚刚输入保存文件的内容

转载于:https://my.oschina.net/zjcx/blog/679574

你可能感兴趣的文章