博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android数据存储——2.文件存储_A_文本文件
阅读量:6943 次
发布时间:2019-06-27

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

今天学习Android第二种存储方式——文件存储_文本文件

Files
   它通过 FileInputStream 和 FileOutputStream 对文件进行操作。接下来几篇将讲述如何使用Files 数据存储。

什么是 Files 数据存储
  • File 就是把需要保存的东西通过文件的形式讯录下来,当需要这些数据时,通过读取这个文件来获取这些数据。因为 Android 采用了 Linux 核心,所以在Android 系统中,文件也是Linux 的形式。
  • Android 中可以在设备本身的的存储或者外接的存储设备中创建用于保存数据的文件。同时,在默认状态下,文件是不能在不同的程序间共享的。
  • /**
     * 输出流OutputStream是从程序中向外输出,比如程序生成文件到指定目录。
     * 输入流InputStream是从外面向程序输入,比如从指定目录下文件读取内容或者从控制台手动输入内容到程序中显示。
     * 输入流和输出流可以一起使用,比如用输入流从目录读取文件内容,在用输出流把读取的内容输出到指定目录
     *
     * IO流输入/输出文件的流程:
     * 1.使用File类定义一个要操作的文件
     * 2.使用字节流或字符流的子类为父类进行实例化,因为四个IO流的操作类都是抽象类
     * 3.完成输入/输出功能
     * 4.关闭流
     */

使用OutputStream完成输出文件到手机内存中的操作

Java代码:

public class MyFileOperateDemo extends Activity {      private static final String FILENAME = "mldn.txt"; //设置文件名称       @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          super.setContentView(R.layout.main);          /**          * 使用OutputStream完成输出文件到手机内存中的操作               */          FileOutputStream output = null; //接收文件输出对象            try {              output = super.openFileOutput(FILENAME, Activity.MODE_PRIVATE);//取得输出流            }           catch (FileNotFoundException e) {              e.printStackTrace();          }          PrintStream out = new PrintStream(output); //输出内容使用 PrintStream 打印流很方便            out.println("姓名:李兴华;");          out.println("年龄:30;");          out.println("地址:北京魔乐科技软件学院;");          out.close(); //资源一定要关闭       }  }
查看 Files 产生的文件
上篇preferences 存储数据时,文件保存在shared_prefs文件夹下,如果我们在 Files产生文件的时候没有为其指定绝对路径,那么系统就会在 shared_prefs 相同的目录中产生一个名为files 的文件夹,里面就有我们写入的数据。如图:

使用InputStream完成从手机内存中读取文件的操作

XML布局:

Java代码:
public class MyFileOperateDemo extends Activity {      private static final String FILENAME = "mldn.txt"; //设置文件名称       private TextView msg = null;//文本组件       protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          super.setContentView(R.layout.main);          this.msg=(TextView)super.findViewById(R.id.msg);          /**          *使用InputStream完成从手机内存中读取文件的操作             */               FileInputStream input = null; //接收文件输入对象            try {              input = super.openFileInput(FILENAME);//取得输入流            }           catch (FileNotFoundException e) {              e.printStackTrace();          }          Scanner scan = new Scanner(input);//输入使用Scanner           while(scan.hasNext()){              this.msg.append(scan.next()+"\n");          }          scan.close();             }  }
读取结果

使用OutputStream完成输出文件到sdcard中的操作(操作SD卡加权限)

Java代码:

public class MyFileOperateDemo extends Activity {      private static final String FILENAME = "mymldn.txt"; //设置文件名称        private static final String DIR = "mldndata";//操作文件夹的名称       @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          super.setContentView(R.layout.main);          /**          * 使用OutputStream完成输出文件到sdcard中的操作(操作SD卡加权限)                  	*/          if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){//判断sdcard是否存在                 System.out.println("*** "+Environment.getExternalStorageDirectory());//输出为/mnt/sdcard               File file = new File(Environment.getExternalStorageDirectory()+ File.separator+DIR+File.separator+FILENAME);//定义要操作的文件                 if(!file.getParentFile().exists()){                  file.getParentFile().mkdirs();//创建父文件夹路径                 }              PrintStream out = null;              try {                  out = new PrintStream(new FileOutputStream(file));                  out.println("北京魔乐科技软件学院(MLDN,www.MLDNJAVA.cn),讲师:李兴华");              }               catch (FileNotFoundException e) {                  e.printStackTrace();              }              finally{//一定要关闭流                   if(out!=null){                      out.close();                  }              }          }          else{              Toast.makeText(this, "保存失败,SD卡不存在!", Toast.LENGTH_LONG).show();          }      }  }
查看 Files 产生的文件

使用InputStream完成从sdcard中读取文件的操作

XML布局:

Java代码:

public class MyFileOperateDemo extends Activity {     private TextView msg = null;//文本组件         private static final String FILENAME = "mymldn.txt"; //设置文件名称       private static final String DIR = "mldndata";//操作文件夹的名称       @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          super.setContentView(R.layout.main);          this.msg=(TextView)super.findViewById(R.id.msg);          /**          * 使用InputStream完成从sdcard中读取文件的操作                  */          if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){//判断sdcard是否存在                 System.out.println("*** "+Environment.getExternalStorageDirectory());//输出为/mnt/sdcard               File file = new File(Environment.getExternalStorageDirectory()+ File.separator+DIR+File.separator+FILENAME);//定义要操作的文件                 if(!file.getParentFile().exists()){                  file.getParentFile().mkdirs();//创建父文件夹路径                 }              Scanner scan = null;              try {                  scan = new Scanner(new FileInputStream(file));                  while(scan.hasNext()){                      this.msg.append(scan.next()+"\n");                  }              }               catch (FileNotFoundException e) {                  e.printStackTrace();              }              finally{//一定要关闭流                   if(scan!=null){                      scan.close();                  }              }          }          else{              Toast.makeText(this, "读取失败,SD卡不存在!", Toast.LENGTH_LONG).show();          } 	}}

读取结果:

转载于:https://www.cnblogs.com/coderookie0820/archive/2013/04/15/4367512.html

你可能感兴趣的文章
Matlab之视角旋转函数[转]
查看>>
vc++加载透明png图片方法-GDI+和CImage两种
查看>>
十五天精通WCF——第十二天 说说wcf中的那几种序列化
查看>>
每天一个linux命令(10):cat 命令
查看>>
android ScrollView中嵌套listview listview可点击处理,可展开
查看>>
一个由proguard与fastJson引起的血案(转)
查看>>
clearing & settlement
查看>>
Lingo 做线性规划 - DEA
查看>>
Axure 全局辅助线(转)
查看>>
js原生设计模式——9外观模式封装2(小型代码库YJ)
查看>>
onvif开发实战2--总结框架搭建
查看>>
Apache ab测试工具使用方法(无参、get传参、post传参)
查看>>
单例设计模式之安全的懒汉式
查看>>
iOS_20_微博OAuth授权_取得用户授权的accessToken
查看>>
离线用户的灰色头像处理
查看>>
php递归函数return会出现无法正确返回想要值的情况
查看>>
Android Studio之Activity切换动画(三)
查看>>
Bitcoin: A Peer-to-Peer Electronic Cash System(比特币论文翻译)
查看>>
Redis-Redi事务注意事项
查看>>
ffmpeg mediacodec 硬解初探
查看>>