Android学习之文件存储——openFileOutput和openFileInput

Android提供了openFileOutput和openFileInput方法读取设备上的文件:

//确定要操作文件的文件名

String FILE_NAME = “tempfile.tmp”;

 

//初始化,如果调用FileOutputStream时指定的文件不存在,

//Android会自动创建它(在data/包名/files/目录下会创建txtme.txt文件)

//在默认情况下,写入的时候会覆盖原文件内容,

//如果想把新写入的内容附加到原文件内容后,则应指定其模式为Context.MODE_APPEND

//MODE_PRIVATE的文件是应用程序私有的 ,

//MODE_WORLD_READABLE则所有应用程序都可以访问的,

//MODE_WORLD_WRITEABLE所以应用程序都可以写

FileOutputStream fos = openFileOutput(FILE_NAME , Context.MODE_PRIVATE);

 

//创建写入流

FileInputStream fis = openFileInput(FILE_NAME);

 

//使用fos向tempfile.tmp文件写入数据

fos.write(“text”);

fos.close();

fos.close();

注:默认情况下,使用openFileOutput方法创建的文件只能被其调用的应用使用,其他应用无法读取这个文件。

=以上来自: http://zhouyuting714.blog.163.com/blog/static/1811643182011325114552522/

====================================================

=以下来自:http://blog.csdn.net/chenzheng_java/article/details/6214261

最终效果图,点击save会保存到文件中,点击show会从文件中读取出内容并显示。

main.xml

 

[xhtml] view plaincopy

  1. <?xml version=”1.0″ encoding=”utf-8″?>
  2. <LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
  3.     android:orientation=”vertical”
  4.     android:layout_width=”fill_parent”
  5.     android:layout_height=”fill_parent”
  6.     >
  7. <TextView
  8.     android:layout_width=”fill_parent”
  9.     android:layout_height=”wrap_content”
  10.     android:text=”请您输入要保存的内容:”
  11.     />
  12.  <EditText
  13.     android:id=”@+id/addText”
  14.     android:layout_width=”fill_parent”
  15.     android:layout_height=”wrap_content”
  16.     android:hint=”请您在此处输入文件内容!”
  17.  />
  18.  <Button
  19.     android:id=”@+id/addButton”
  20.     android:layout_width=”wrap_content”
  21.     android:layout_height=”wrap_content”
  22.     android:text=”save”
  23.  />
  24.  <Button
  25.     android:id=”@+id/showButton”
  26.     android:layout_width=”wrap_content”
  27.     android:layout_height=”wrap_content”
  28.     android:text=”show”
  29.  />
  30.  <TextView
  31.     android:id=”@+id/showText”
  32.     android:layout_width=”fill_parent”
  33.     android:layout_height=”wrap_content”
  34.     />
  35. </LinearLayout>

 

 

 

activity代码

 

 

  1. package cn.com.file;
  2. import java.io.ByteArrayOutputStream;
  3. import java.io.FileInputStream;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import android.app.Activity;
  8. import android.os.Bundle;
  9. import android.view.View;
  10. import android.view.View.OnClickListener;
  11. import android.widget.Button;
  12. import android.widget.EditText;
  13. import android.widget.TextView;
  14. import android.widget.Toast;
  15. public class FileTest extends Activity {
  16.     private EditText editText;
  17.     private TextView showTextView;
  18.     // 要保存的文件名
  19.     private String fileName = “chenzheng_java.txt”;
  20.     @Override
  21.     public void onCreate(Bundle savedInstanceState) {
  22.         super.onCreate(savedInstanceState);
  23.         setContentView(R.layout.main);
  24.         // 获取页面中的组件
  25.         editText = (EditText) findViewById(R.id.addText);
  26.         showTextView = (TextView) findViewById(R.id.showText);
  27.         Button addButton = (Button) this.findViewById(R.id.addButton);
  28.         Button showButton = (Button) this.findViewById(R.id.showButton);
  29.         // 绑定单击事件
  30.         addButton.setOnClickListener(listener);
  31.         showButton.setOnClickListener(listener);
  32.     }
  33.     // 声明监听器
  34.     private View.OnClickListener listener = new OnClickListener() {
  35.         public void onClick(View v) {
  36.             Button view = (Button) v;
  37.             switch (view.getId()) {
  38.             case R.id.addButton:
  39.                 save();
  40.                 break;
  41.             case R.id.showButton:
  42.                 read();
  43.                 break;
  44.             }
  45.         }
  46.     };
  47.     /**
  48.      *@author chenzheng_Java
  49.      *保存用户输入的内容到文件
  50.      */
  51.     private void save() {
  52.         String content = editText.getText().toString();
  53.         try {
  54.             /* 根据用户提供的文件名,以及文件的应用模式,打开一个输出流.文件不存系统会为你创建一个的,
  55.              * 至于为什么这个地方还有FileNotFoundException抛出,我也比较纳闷。在Context中是这样定义的
  56.              *   public abstract FileOutputStream openFileOutput(String name, int mode)
  57.              *   throws FileNotFoundException;
  58.              * openFileOutput(String name, int mode);
  59.              * 第一个参数,代表文件名称,注意这里的文件名称不能包括任何的/或者/这种分隔符,只能是文件名
  60.              *          该文件会被保存在/data/data/应用名称/files/chenzheng_java.txt
  61.              * 第二个参数,代表文件的操作模式
  62.              *          MODE_PRIVATE 私有(只能创建它的应用访问) 重复写入时会文件覆盖
  63.              *          MODE_APPEND  私有   重复写入时会在文件的末尾进行追加,而不是覆盖掉原来的文件
  64.              *          MODE_WORLD_READABLE 公用  可读
  65.              *          MODE_WORLD_WRITEABLE 公用 可读写
  66.              *  */
  67.             FileOutputStream outputStream = openFileOutput(fileName,
  68.                     Activity.MODE_PRIVATE);
  69.             outputStream.write(content.getBytes());
  70.             outputStream.flush();
  71.             outputStream.close();
  72.             Toast.makeText(FileTest.this, “保存成功”, Toast.LENGTH_LONG).show();
  73.         } catch (FileNotFoundException e) {
  74.             e.printStackTrace();
  75.         } catch (IOException e) {
  76.             e.printStackTrace();
  77.         }
  78.     }
  79.     /**
  80.      * @author chenzheng_java
  81.      * 读取刚才用户保存的内容
  82.      */
  83.     private void read() {
  84.         try {
  85.             FileInputStream inputStream = this.openFileInput(fileName);
  86.             byte[] bytes = new byte[1024];
  87.             ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
  88.             while (inputStream.read(bytes) != -1) {
  89.                 arrayOutputStream.write(bytes, 0, bytes.length);
  90.             }
  91.             inputStream.close();
  92.             arrayOutputStream.close();
  93.             String content = new String(arrayOutputStream.toByteArray());
  94.             showTextView.setText(content);
  95.         } catch (FileNotFoundException e) {
  96.             e.printStackTrace();
  97.         } catch (IOException e) {
  98.             e.printStackTrace();
  99.         }
  100.     }
  101. }

 

其他的都为默认。

关于文件保存的路径可以通过ADT携带的File Explorer工具进行查看。如何调出File Explorer工具呢;我们可以通过Windows–showView–others-android下面看到File Explorer。这里是我的一个截图。

 

对于这个程序,基本上没什么难点,就是纯粹的java流知识。唯一不同的就是context为我们提供了两个方法来获取输入输出流。简单、方便、快捷啊。

 

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注