标签:
转自以下文章:
http://blog.csdn.net/zuolongsnail/article/details/6559338
http://blog.csdn.net/xiazdong/article/details/7687439
http://www.cnblogs.com/feisky/archive/2011/01/05/1926177.html
1.文件存储数据使用了Java中的IO操作来进行文件的保存和读取,只不过Android在Context类中封装好了输入流和输出流的获取方法。
创建的存储文件保存在/data/data/<package name>/files文件夹下。
2.操作。
保存文件内容:通过Context.openFileOutput获取输出流,参数分别为文件名和存储模式。
读取文件内容:通过Context.openFileInput获取输入流,参数为文件名。
删除文件:Context.deleteFile删除指定的文件,参数为将要删除的文件的名称。
获取文件名列表:通过Context.fileList获取files目录下的所有文件名数组。
*获取文件路径的方法:
绝对路径:/data/data/<package name>/files/filename
Context:Context.getFilesDir()可以获取到"/data/data/<package name>/files"
3.四种文件保存的模式。
Context.MODE_PRIVATE 为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下写入的内容会覆盖原文件的内容。
Context.MODE_APPEND 检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
MODE_WORLD_READABLE 表示当前文件可以被其他应用读取。
MODE_WORLD_WRITEABLE 表示当前文件可以被其他应用写入。
在使用模式时,可以用"+"来选择多种模式,比如openFileOutput(FILENAME, Context.MODE_PRIVATE + MODE_WORLD_READABLE);
目标:当点击保存时,将以特定的文件名称和特定的文件内容保存内容,点击读取时,将读取特定的文件的文件内容显示到文件内容文本框;
当点击保存之后,效果如下:
MainActivity.java
package org.xiazdong.file; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; public class MainActivity extends Activity { private Button saveButton,readButton; private EditText filenameEt,filecontentEt; private Context context = this; private OnClickListener listener = new OnClickListener(){ @Override public void onClick(View v) { if(v==saveButton){ String filename = filenameEt.getText().toString(); String filecontent = filecontentEt.getText().toString(); FileOutputStream out = null; try { out = context.openFileOutput(filename, Context.MODE_PRIVATE); out.write(filecontent.getBytes("UTF-8")); } catch (Exception e) { e.printStackTrace(); } finally{ try { out.close(); } catch (Exception e) { e.printStackTrace(); } } } else if(v==readButton){ String filename = filenameEt.getText().toString(); //获得读取的文件的名称 FileInputStream in = null; ByteArrayOutputStream bout = null; byte[]buf = new byte[1024]; bout = new ByteArrayOutputStream(); int length = 0; try { in = context.openFileInput(filename); //获得输入流 while((length=in.read(buf))!=-1){ bout.write(buf,0,length); } byte[] content = bout.toByteArray(); filecontentEt.setText(new String(content,"UTF-8")); //设置文本框为读取的内容 } catch (Exception e) { e.printStackTrace(); } filecontentEt.invalidate(); //刷新屏幕 try{ in.close(); bout.close(); } catch(Exception e){} } } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); saveButton = (Button)this.findViewById(R.id.saveButton); readButton = (Button)this.findViewById(R.id.readButton); filenameEt = (EditText)this.findViewById(R.id.filename); filecontentEt = (EditText)this.findViewById(R.id.filecontent); saveButton.setOnClickListener(listener); readButton.setOnClickListener(listener); } }
如果一个文件很大,则不适用于存放在手机的存储中;
如果手机存在sdcard,则sdcard的目录为/mnt/sdcard目录;
此时模拟器已经支持sdcard了;
在程序中访问SDCard,你需要申请访问SDCard的权限。
在AndroidManifest.xml中加入访问SDCard的权限如下:
<!-- 在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
要往SDCard存放文件,程序必须先判断手机是否装有SDCard,并且可以进行读写。
注意:访问SDCard必须在AndroidManifest.xml中加入访问SDCard的权限
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ File sdCardDir = Environment.getExternalStorageDirectory();//获取SDCard目录 File saveFile = new File(sdCardDir, “a.txt”); FileOutputStream outStream = new FileOutputStream(saveFile); outStream.write("test".getBytes()); outStream.close(); } Environment.getExternalStorageState()方法用于获取SDCard的状态,如果手机装有SDCard,并且可以进行读写,那么方法返回的状态等于Environment.MEDIA_MOUNTED。 Environment.getExternalStorageDirectory()方法用于获取SDCard的目录,当然要获取SDCard的目录,你也可以这样写: File sdCardDir = new File("/sdcard"); //获取SDCard目录 File saveFile = new File(sdCardDir, "itcast.txt"); //上面两句代码可以合成一句: File saveFile = new File("/sdcard/a.txt"); FileOutputStream outStream = new FileOutputStream(saveFile); outStream.write("test".getBytes()); outStream.close();
标签:
原文地址:http://www.cnblogs.com/324sige/p/5720159.html