码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2015-12-06 17:25:42      阅读:258      评论:0      收藏:0      [点我收藏+]

标签:

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 

 

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

标签:

原文地址:http://www.cnblogs.com/zrui513/p/5010145.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!