转载请标明出处:http://blog.csdn.net/wu_wxc/article/details/49448977
本文出自【吴孝城的CSDN博客】
先说下Android中文件相关的操作:
openFileOutput(filename, mode) 打开文件输出流,就是往文件中写入数据,第二参数是模式,就是操作权限
openFileIntut(filename) 打开文件输入流,将文件中的信息读取到程序中
getDir(name, mode) 在app的data目录下获取或创建name对应的子目录
getFileDir() 获得app的data目录的file目录的绝对路径
String[] fileList() 返回app的data目录下的全部文件
deleteFile(filename) 删除app的data目录下指定的文件
文件的操作权限
Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件
Context.MODE_PRIVATE:可写为0,私有方法,只有创建这个文件的程序才能访问,写入的数据会覆盖原文件的内容
Context.MODE_WORLD_READABLE:可写为2当前文件可被其他文件读取
Context.MODE_WORLD_WRITEABLE:可写为1,当前文件可被其他文件读取和写稿
在Android Studio中查看写入的文件的方法,打开
Tool >> Android >> Android Device >> Monitor
第一次打开会有一个发送什么到谷歌的,直接回车就行,
打开后在DDMS >> File Explore >> data >> data >> (包名) >> files
默认是没有flses这个文件夹的
下面是一个小例子
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <EditText android:id="@+id/edit_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="请输入文件名" android:ems="10" android:layout_centerHorizontal="true"/> <EditText android:id="@+id/edit_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="请输入文件内容" android:ems="10" android:layout_marginTop="10dp" android:layout_below="@+id/edit_name" android:layout_centerHorizontal="true"/> <Button android:id="@+id/write" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/edit_text" android:layout_alignLeft="@+id/edit_text" android:text="写入"/> <Button android:id="@+id/reset" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/edit_text" android:layout_alignRight="@+id/edit_text" android:text="重置"/> <Button android:id="@+id/read" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/write" android:layout_centerHorizontal="true" android:layout_marginTop="10dp" android:text="读取文件内容"/> </RelativeLayout>
package cn.wuxiaocheng.filehelper; import android.content.Context; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import java.io.IOException; public class MainActivity extends AppCompatActivity implements OnClickListener { private EditText editname; private EditText editdetail; private Button btnsave; private Button btnreset; private Button btnread; private Context mContext; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //得到程序当前的Context,即MainActivity.this mContext = getApplicationContext(); bindViews(); } private void bindViews() { editname = (EditText) findViewById(R.id.edit_name); editdetail = (EditText) findViewById(R.id.edit_text); btnreset = (Button) findViewById(R.id.write); btnsave = (Button) findViewById(R.id.reset); btnread = (Button) findViewById(R.id.read); btnreset.setOnClickListener(this); btnsave.setOnClickListener(this); btnread.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.reset: //点击重置按钮,将两个输入框清空 editdetail.setText(""); editname.setText(""); break; case R.id.write: //创建文件助手对象,传入mContext程序当前的内容 FileHelper fHelper = new FileHelper(mContext); //获得文件名和写入内容 String filename = editname.getText().toString(); String filetext = editdetail.getText().toString(); try { //保存文件名和内容 fHelper.save(filename, filetext); Toast.makeText(getApplicationContext(), "数据写入成功", Toast.LENGTH_SHORT).show(); } catch (Exception e) { //写入异常时 e.printStackTrace(); Toast.makeText(getApplicationContext(), "数据写入失败", Toast.LENGTH_SHORT).show(); } break; case R.id.read: //定论一个detail,默认为空用来存放要输出的内容 String detail = ""; FileHelper fHelper2 = new FileHelper(getApplicationContext()); try { //得到输入框中文件名获得文件内容,因为可以写入多个不同名文件,所以要根据文件名来获得文件内容 String fname = editname.getText().toString(); //调用read()方法,传入上面获得的文件保,将返回的内容赋值给detail detail = fHelper2.read(fname); } catch (IOException e) { e.printStackTrace(); } Toast.makeText(getApplicationContext(), detail, Toast.LENGTH_SHORT).show(); break; } } }FileHelper.java
package cn.wuxiaocheng.filehelper; import android.content.Context; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; /** * Created by Administrator on 2015/10/27. */ public class FileHelper { private Context mContext; //空参数构造函数,传入的值为空时,不出错 public FileHelper() { } public FileHelper(Context mContext) { super(); this.mContext = mContext; } /* * 定义文件保存的方法,写入到文件中,所以是输出流 * */ public void save(String name, String content) throws Exception { //Context.MODE_PRIVATE权限,只有自身程序才能访问,而且写入的内容会覆盖文本内原有内容 FileOutputStream output = mContext.openFileOutput(name, Context.MODE_PRIVATE); output.write(content.getBytes()); //将String字符串以字节流的形式写入到输出流中 output.close(); //关闭输出流 } /* * 定义文件读取的方法 * */ public String read(String filename) throws IOException { //打开文件输入流 FileInputStream input = mContext.openFileInput(filename); //定义1M的缓冲区 byte[] temp = new byte[1024]; //定义字符串变量 StringBuilder sb = new StringBuilder(""); int len = 0; //读取文件内容,当文件内容长度大于0时, while ((len = input.read(temp)) > 0) { //把字条串连接到尾部 sb.append(new String(temp, 0, len)); } //关闭输入流 input.close(); //返回字符串 return sb.toString(); } }
源码下载