android:
id="@+id/tv_read_file_sd"
android:
layout_width="match_parent"
android:
layout_height="wrap_content"
android:
layout_marginTop="10dp"
android:
textColor="#000"
android:
textSize="14sp"/>
Activity代码:
ed_file_save_sd=(EditText)findViewById(R.id.ed_file_save_sd);
tv_read_file_sd=(TextView)findViewById(R.id.tv_read_file_sd);
btn_file_read_sd=(Button)findViewById(R.id.btn_file_read_sd);
btn_file_read_sd.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewview){
try{
Stringcontent=readFromSD();
tv_read_file_sd.setText("从SDCard读取到的内容是:
"+content);
}catch(Exceptione){
e.printStackTrace();
ToastUtils.showToast(FileDataActivity.this,"读取文件失败!
");
}
}
});
btn_file_save_sd=(Button)findViewById(R.id.btn_file_save_sd);
btn_file_save_sd.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewview){
Stringcontent=ed_file_save_sd.getText().toString();
try{
save2SDCard(content);
ToastUtils.showToast(FileDataActivity.this,"文件写入SDCard成功");
}catch(Exceptione){
e.printStackTrace();
ToastUtils.showToast(FileDataActivity.this,"文件写入SDCard失败");
}
}
});
publicvoidsave2SDCard(Stringcontent)throwsException{
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){//如果sdcard存在
StringfileName3=Environment.getExternalStorageDirectory().getCanonicalPath()+File.separator+"test"+File.separator+fileName2;
Filefile=newFile(fileName3);
if(!
file.getParentFile().exists()){
file.getParentFile().mkdir();
}
FileOutputStreamfileOutputStream=newFileOutputStream(file);
fileOutputStream.write(content.getBytes());
fileOutputStream.close();
}else{
ToastUtils.showToast(this,"SDCard不存在");
}
}
publicStringreadFromSD()throwsException{
StringBufferstringBuffer=newStringBuffer("");
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
StringfileName3=Environment.getExternalStorageDirectory().getCanonicalPath()+File.separator+"test"+File.separator+fileName2;
Filefile=newFe(fileName3);
if(!
file.getParentFile().exists()){
file.getParentFile().mkdir();
}
FileInputStreamfileInputStream=newFileInputStream(file);
byte[]temp=newbyte[1024];
intlen=0;
while((len=fileInputStream.read(temp))>0){
stringBuffer.append(newString(temp,0,len));
}
fileInputStream.close();
}else{
ToastUtils.showToast(this,"SDCard不存在");
}
returnstringBuffer.toString();
}
SDCard的读取和文件操作差不多,需要判断SDCard是否存在,最后是效果图:
4、读取raw和assets文件的数据
raw/res中的文件会被映射到Android的R文件中,我们直接通过R文件就可以访问,这里就不在过多介绍了。
assets中的文件不会像raw/res中的文件一样被映射到R文件中,可以有目录结构,Android提供了一个访问assets文件的AssetManager对象,我们访问也很简单:
AssetManagerassetsManager=getAssets();
InputStreaminputStream=assetsManager.open("fileName");
这样就可以直接获取到assets目录下的资源文件。
AndroidOS的文件存储就简单介绍到这里,下一篇我们介绍SharedPreference存储方法,下面提供一些文件存储的工具方法:
packagecom.example.datasave.io;
importandroid.content.Context;
importjava.io.BufferedReader;
importjava.io.BufferedWriter;
importjava.io.ByteArrayOutputStream;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.InputStreamReader;
importjava.io.OutputStreamWriter;
/**
*IO流工具类
*很简单,仅支持文本操作
*/
publicclassIOUtils{
/**
*文本的写入操作
*
*@paramfilePath文件路径。
一定要加上文件名字
*例如:
../a/a.txt
*@paramcontent写入内容
*@paramappend是否追加
*/
publicstaticvoidwrite(StringfilePath,Stringcontent,booleanappend){
BufferedWriterbufw=null;
try{
bufw=newBufferedWriter(newOutputStreamWriter(
newFileOutputStream(filePath,append)));
bufw.write(content);
}catch(Exceptione1){
e1.printStackTrace();
}finally{
if(bufw!
=null){
try{
bufw.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
}
/**
*文本的读取操作
*
*@parampath文件路径,一定要加上文件名字
*例如:
../a/a.txt
*@return
*/
publicstaticStringread(Stringpath){
BufferedReaderbufr=null;
try{
bufr=newBufferedReader(newInputStreamReader(
newFileInputStream(path)));
StringBuffersb=newStringBuffer();
Stringstr=ull;
while((str=bufr.readLine())!
=null){
sb.append(str);
}
returnsb.toString();
}catch(Exceptione){
e.printStackTrace();
}finally{
if(bufr!
=null){
try{
bufr.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
returnnull;
}
/**
*文本的读取操作
*
*@paramis输入流
*@return
*/
publicstaticStringread(InputStreamis){
BufferedReaderbufr=null;
try{
bufr=newBufferedReader(newInputStreamReader(is));
Strin