文件存储

作者: Mayo酱 | 来源:发表于2017-09-24 21:06 被阅读0次

    1.openFileInput和openFileOutput的使用

    文件的使用,注意最后要用finally给关闭掉。
    openFileOutput:(写入文件,如果没有文件名可以创建,这里不需要判断是否有这个文件)---> 返回FileOutputStream
    openFileInput:(读取文件,没有文件名会保存,debug的时候会看到,不影响ui)---> FileInputStream
    保存文件:
    第一个参数:文件名(不包含路径)默认为data/data/包名/files/下
    第二个参数:文件操作模式,下面是写入的四种模式
        MODE_APPEND:即向文件尾写入数据(文件已存在就追加)
        MODE_PRIVATE:即仅打开文件可写入数据(默认模式,相同文件名会覆盖内容)
        MODE_WORLD_READABLE:所有程序均可读该文件数据(弃用)
        MODE_WORLD_WRITABLE:即所有程序均可写入数据(弃用)
    
    private void savePackageFile(Context context,String filename,String text) {
            //String msg = tvSaveMessage.getText().toString() + " \n";
            FileOutputStream outputStream = null;
            BufferedWriter writer = null;
    
            try {
                outputStream = context.openFileOutput(filename, Context.MODE_APPEND);
                writer = new BufferedWriter(new OutputStreamWriter(outputStream));
                writer.write(text);
                //outputStream.write(msg.getBytes());
                //outputStream.flush();
                //outputStream.close();
            } catch (Exception e) {
                e.printStackTrace();
            } finally{
                if(writer != null){
                    try {
                        writer.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    
    读取文件:
    参数:文件名(读取包名下files文件夹下的文件)
    返回值:FileInputStream
    
        private void readSaveFile(Context context,String filename) {
            FileInputStream inputStream = null;
            BufferedReader bufferedReader = null;
            StringBuilder stringBuilder = new StringBuilder();
    
            try {
                inputStream = context.openFileInput(filename);
                bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
                String line =  "";
                while ((line = bufferedReader.readLine()) != null){
                    stringBuilder.append(line);
                }
    
    //            byte temp[] = new byte[1024];
    //            StringBuilder sb = new StringBuilder("");
    //            int len = 0;
    //            while ((len = inputStream.read(temp)) > 0){
    //                sb.append(new String(temp, 0, len));
    //            }
    //            inputStream.close();
    
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
              if(bufferedReader != null){
                  try {
                      bufferedReader.close();
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
              }
            }
        }
    

    2.SD卡读取和写入—路径:/storage/sdcard0/

    ######SD卡权限;
    <!-- 在SDCard中创建与删除文件权限 -->
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
    <!-- 往SDCard写入数据权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    
    往SD卡写入文件的方法
    public void savaFileToSD(String filename, String filecontent) throws Exception {
        //如果手机已插入sd卡,且app具有读写sd卡的权限
        if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
       filename = Environment.getExternalStorageDirectory().getCanonicalPath() + "/" + filename;
    
            //这里就不要用openFileOutput了,那个是往手机内存中写数据的
            FileOutputStream output = new FileOutputStream(filename);
            output.write(filecontent.getBytes());
            //将String字符串以字节流的形式写入到输出流中
            output.close();
            //关闭输出流
        } else Toast.makeText(context, "SD卡不存在或者不可读写", Toast.LENGTH_SHORT).show();
    }
    
    //读取SD卡中文件的方法
    //定义读取文件的方法:
    public String readFromSD(String filename) throws IOException {
        StringBuilder sb = new StringBuilder("");
        if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            filename = Environment.getExternalStorageDirectory().getCanonicalPath() + "/" + filename;
            //打开文件输入流
            FileInputStream input = new FileInputStream(filename);
            byte[] temp = new byte[1024];
    
            int len = 0;
            //读取文件内容:
            while ((len = input.read(temp)) > 0) {
                sb.append(new String(temp, 0, len));
            }
            //关闭输入流
            input.close();
        }
        return sb.toString();
    }
    

    3.读取raw和assets文件夹下的文件

    res/raw:文件会被映射到R.java文件中,访问的时候直接通过资源ID即可访问,而且 他不能有目录结构,就是不能再创建文件夹
    assets:不会映射到R.java文件中,通过AssetManager来访问,能有目录结构,即可以自行创建文件夹
    
    读取文件资源
    raw: 
    InputStream is =getResources().openRawResource(R.raw.filename); 
    
    读取文件资源
    assets: 
    AssetManager am =  getAssets();   
    InputStream is = am.open("filename");
    

    相关文章

      网友评论

        本文标题:文件存储

        本文链接:https://www.haomeiwen.com/subject/zfccextx.html