Android--文件存储操作(一)

1、写入内置空间      output   write

2、写入SDCard卡      input   read

该文件指针可以通过 getFilePointer 方法读取,并通过 seek 方法设置。

RandomAccessFile同时将FileInputStream和FileOutputStream整合到一起,而且支持将从文件任意字节处读或写数据,RandomAccessFile类提供一种机制,相当于在文件流中插入了一个指针,可以按需读取。

File只是对一个文件或目录的抽象,可以想象成是一个文件句柄、标识,这个类本身只提供对文件的打开,关闭,删除,属性访问等等;

文件存储简单的来说就是一般的JAVASE中的IO流,只是把他应用于Android手机中而已;

1  文件存储

核心就是Context的openFileInput()和openFileOutput()方法.之后就用Java流来进行读写就可一了

    //将一段文本内容保存到文件中:
    //在onDestory() 里面调用save()方法.此方法写在了super.onDestory() 下面.   //openFileOutput --> FileOutputStream  --> OutputStreamReader -->  BufferedReader
    public void save() {
        String data = "Data to save";
        FileOutputStream out = null;
        BufferedWriter writer = null;
        try {
            out = mContext.openFileOutput("data", Context.MODE_PRIVATE);//需要FileNot错误.
            writer = new BufferedWriter(new OutputStreamWriter(out)); //构建一个outputStreamWriter.接着由构建了一个BufferedWriter()
            writer.write(data);//需要IO错误
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (writer != null) {
                try {
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    //在下一次打开的时候,从文件中读取数据  // openFileinput --> FileInputStream --> InputStreamReader --> BufferedReader  // 前两个  file  一直在 input 前面
    public String load() {
        FileInputStream in = null;
        BufferedReader reader = null;
        StringBuilder sb = new StringBuilder();
        try {
            in = mContext.openFileInput("data");        //需要fileNOt错误
            reader = new BufferedReader(new InputStreamReader(in));
            String line = "";
            while ((line = reader.readLine()) != null) {  //需要IO错误
                sb.append(line);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return sb.toString();
    }
//写入到内置存储空间
    public void write(View view) {
        String inputString = inputText.getText().toString();
        if (inputString == null || "".equals(inputString.trim())) {
            Toast.makeText(mContext, "请输入需要写入的内容,不能为空", Toast.LENGTH_SHORT).show();
            return;
        }
        FileOutputStream fos = null;
        try {
            if (appendBtn.isChecked()) {
                fos = mContext.openFileOutput(fileName, Context.MODE_APPEND);
            } else {
                fos = mContext.openFileOutput(fileName, Context.MODE_PRIVATE);
            }
            fos.write(inputString.getBytes());      //向文件里写入内容
            Toast.makeText(mContext, "内容写入完毕!", Toast.LENGTH_SHORT).show();
        } catch (FileNotFoundException e) {
            Toast.makeText(mContext, "文件没有找到,请检查文件路径", Toast.LENGTH_SHORT).show();
        } catch (IOException e) {
            Toast.makeText(mContext, "写入过程中出现错误 IO", Toast.LENGTH_SHORT).show();
        }
    }

    //读取内置存储空间
    public void readFromSDCard(View view) {
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            String path = Environment.getExternalStorageDirectory() + File.separator + fileName;
            File file = new File(path);
            StringBuilder sBuilder = new StringBuilder("");
            byte[] buffer = new byte[256];
            int hasRead = 0;

            try {
                RandomAccessFile raf = new RandomAccessFile(file, "rw");
                while ((hasRead = raf.read(buffer)) != -1) {
                    sBuilder.append(new String(buffer, 0, hasRead));
                }
                outputText.setText(sBuilder);
                raf.close();
            } catch (FileNotFoundException e) {
                Toast.makeText(mContext, "文件没有找到,请检查文件路径", Toast.LENGTH_SHORT).show();
            } catch (IOException e) {
                Toast.makeText(mContext, "写入过程中出现错误 IO", Toast.LENGTH_SHORT).show();
            }
        }
    }

默认保存在 /data/data/<packagename>/files/ 目录下的

第二个是文件的操作模型,主要有两种模式可选

  1. MODE_PRIVATE(覆盖,是默认的操作模式)
  2. MODE_APPEND (追加)   不存在创建
  3. MODE_WORLD_READABLE    允许其他应用程序对程序进行读写操作.不过太危险了 ,在 4.2 之后 被废弃
  4. MODE_WORLD_WRITEABLE

edit.setSelection(inputText.length());

TextUtils.isEmpty()方法,  这个方法很好用,可以同时判断两种状态(null  和  等于空字符串)  的时候,就会返回true

时间: 2024-11-05 11:46:20

Android--文件存储操作(一)的相关文章

Android文件存储的问题:ClassLoader和实现Parcelable接口后 详解及用途

可能小伙伴们读了我上一篇博客关于Android文件存储的的,在文件操作的时候大家有没有疑问呀,有就对了,可能在保存自定义对象的时候,如何序列化呀?ClassLoader到底是啥鬼呀?序列化后怎么读取出来呀?好吧,针对于上面的问题,我一个一个的说明吧! 今天主要是讲ClassLoader的用途, ClassLoader主要对类的请求提供服务,当JVM需要某类时,它根据名称向ClassLoader要求这个类,然后由ClassLoader返回这个类的class对象. 1.1 几个相关概念ClassLo

android: 文件存储

数据持久化就是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑 关机的情况下,这些数据仍然不会丢失.保存在内存中的数据是处于瞬时状态的,而保存在 存储设备中的数据是处于持久状态的,持久化技术则是提供了一种机制可以让数据在瞬时状 态和持久状态之间进行转换. 持久化技术被广泛应用于各种程序设计的领域当中,而本书中要探讨的自然是 Android 中的数据持久化技术.Android 系统中主要提供了三种方式用于简单地实现数据持久化功能, 即文件存储.SharedPreference 存储以

[转]Android - 文件读写操作 总结

在android中的文件放在不同位置,它们的读取方式也有一些不同. 本文对android中对资源文件的读取.数据区文件的读取.SD卡文件的读取及RandomAccessFile的方式和方法进行了整理.供参考. 一.资源文件的读取: 1) 从resource的raw中读取文件数据: [java] view plaincopy String res = ""; try{ //得到资源中的Raw数据流 InputStream in = getResources().openRawResour

Android文件存储详细完整示例

MainActivity如下: package cc.cv; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import android.os.Bundl

android文件存储位置切换

最近有个需求,助手的google卫星地图和OpenCycleMap下载的离线地图数据,要能够在内置存储和外置存储空间之间切换,因为离线瓦片数据非常大,很多户外用户希望将这些文件存储在外置TF卡上,不占用内置存储空间,所以把最近研究的整理了下,分享给大家. 需要考虑和遇到的问题(主要是不同手机.不同系统的兼容性): 1.这样获取手机所有挂载的存储器?   Android是没有提供显式的接口的,首先肯定是要阅读系统设置应用“存储”部分的源码,看存储那里是通过什么方式获取的.最后找到StorageMa

程序员带你学习安卓开发系列-Android文件存储

这是程序员带你学习安卓开发系列教程.本文章致力于面向对象程序员可以快速学习开发安卓技术. 上篇文章:.Net程序员快速学习安卓开发-布局和点击事件的写法 主要讲解了布局和点击事件的写法. 上篇文章补充: 控件单位介绍: px 像素 dip或者dp 设备独立像素 sp 比例像素 控件的高度宽度一般用dip或者dp.字体用sp. Android 存储数据项目: 描述:实现QQ登录效果.如图: 输入帐号密码,并勾选记住帐号 ,点击登录时,保存帐号信息.下次登陆可以直接显示上次保存的QQ帐号. 前台界面

Android文件存储

Android使用文件系统来读取和保存文件的, 相关的包请参照java.io包下面的文件. 1) 选择内部存储(Internal Storage)或者是外部存储(External Storage) Android设备有两个存储区域:内部存储和外部存储空间, 顾名思义, 内部存储是跟随android系统的, 外部系统是可拆卸的设备例如SD card等. 对于很多Android设备, 即使没有前面所说的外部设备(如SD card), 系统同样提供在内部存储区域上提供了一块空间作为"外部存储"

Android文件存储使用参考

可能遇到的问题 android系统自身自带有存储,另外也可以通过sd卡来扩充存储空间.前者好比pc中的硬盘,后者好移动硬盘. 前者空间较小,后者空间大,但后者不一定可用. 开发应用,处理本地数据存取时,可能会遇到这些问题: 需要判断sd卡是否可用: 占用过多机身内部存储,容易招致用户反感,优先将数据存放于sd卡; 应用数据存放路径,同其他应用应该保持一致,应用卸载时,清除数据: 标新立异在sd卡根目录建一个目录,招致用户反感 用户卸载应用后,残留目录或者数据在用户机器上,招致用户反感 数据安全性

android 文件存储对文件名大小写不敏感

1.开发中发现,当两个文件名只有大小写的区别,其他都一样的情况,android中会默认是同一个文件. 比如,你在同一个文件夹下有一个文件 aa.txt   重新创建一个文件命名为AA.txt  android系统会认为这俩是同一个文件,从而出现覆盖的问题. 经测试发现,windows.Mac osx 系统也是这样的. 2.项目中遇到的问题是.创建文档时防止文件重名导致的覆盖问题.使用 file.exist()方法来判断文件是否存在,经测试发现: 存储路径时sd卡时,该方法不区分大小写,但是路径在

Android文件存储往SD卡中写入文件路径出错问题求解。

============问题描述============   因为学习需要  看的老罗的视频  关于数据存储往SD卡写文件的那一部分  几乎完全照办的敲的代码   结果在pad上测试的时候和预想的有区别     本来应该存储到SD卡中的文件结果跑到pad自带内存中去了...   然后我尝试过把路径直接自己手动写  还是一样存到了自带内存中  这到底是为什么啊? 顺带吐槽一下万恶的导师  十一还要我们加班 求大神们指导呀~   国庆节玩的开学哟!!! ============解决方案1======