管理文件

一、存储的分类:内置存储和外置存储
Internal storage:在data/data/包名里
External storage:用getExternalStorageDirectory()方法获取目录

获取External存储的权限
android:permission.WRITE_EXTERNAL_STORAGE

Internal storage
getFileDir():返回一个File,代表了app的internal目录;
getCacheDir():返回一个File,代表了app的internal缓存目录。

在内部存储创建文件,并把内容保存在文件里即存储数据:

    private void testFileDemo() {
        File file = new File(getFilesDir(),"test.txt");
        Log.i("MainActivity","getFileDir"+ getFilesDir().getAbsolutePath());
        Log.i("MainActivity","file path"+ file.getAbsolutePath());

        try {
           boolean isSuccess = file.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

与sharedPreferences的区别:
1、sharedPreferences由系统封装,但是它不够灵活,只能存String、boolean、int型数据;
2、自己创建很灵活,可以存很多数据、大批量的数据。

新建文件,并且写入数据:

   String string = "I'm tall";
        try {
            FileOutputStream fileOutputStream = openFileOutput("test2.txt", Context.MODE_PRIVATE);
            try {
                fileOutputStream.write(string.getBytes());
                fileOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
         //check external storage state
        String state = Environment.getExternalStorageState();
        if(TextUtils.equals(state,Environment.MEDIA_MOUNTED)){}

持久化数据有几种?
1、存到sharedPreferences,
2、存到文件里
3、数据库
4、网络存储

基本操作:
1、如何读取应用本身目录?
2、怎样读取文件?
3、如何写入文件?
4、如何删除文件?

如何操作文件(增删改查)

读取各目录下的文件

1、操作外置存储文件

    public void testSDCard(){
        String filePath = Environment.getExternalStorageDirectory().getAbsolutePath();
        File file = new File("filePath");
    }

2、操作assets目录下的文件

android studio添加assets文件夹:
1、结构管理区域选择“Project”;
2、新建”assets”文件夹:app->src->main,new Directory,”assets”
3、配置:项目文件夹根目录下,xxx.iml文件里(xxx为项目名)添加如下代码:

  private void testAsserts() throws IOException {
        /*第一种方法:直接读路径 * */
        //webView加载asset中的文件内容
        WebView webView = new WebView(this);
        //把本地的网页缓存在这
        webView.loadUrl("file:///android_asset/test.html");

        /*第二种方法:读流 */
        try {
            //open只能是文件不能是文件夹
            InputStream inputStream = getResources().getAssets().open("test.html");
            inputStream
        } catch (IOException e) {
            e.printStackTrace();
            Toast.makeText(MainActivity.this,"文件读取异常",Toast.LENGTH_SHORT).show();
        }

        //读列表
        String[] fileNames = getAssets().list("images/");

        //读图片
        InputStream inputStream = getResources().getAssets().open("images/me_one");
        //将输入流变成bitmap(图片的位图)
        Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
        ImageView imageView = new ImageView(this);
        imageView.setImageBitmap(bitmap);

        //读音频
        AssetFileDescriptor assetFileDescriptor = getAssets().openFd("yesterday_once_more.pm3");
        MediaPlayer mediaPlayer = new MediaPlayer();
        mediaPlayer.reset();
        mediaPlayer.setDataSource(
                assetFileDescriptor.getFileDescriptor(),
                assetFileDescriptor.getStartOffset(),
                assetFileDescriptor.getLength());
        mediaPlayer.prepare();
        mediaPlayer.start();
    }

3、操作raw目录下的文件、操作res目录下的文件

public void testResFile(){
        InputStream inputStream = getResources().openRawResource(R.raw.yesterday_once_more);
      getResources().getColor(R.color.abc_background_cache_hint_selector_material_dark);
        getResources().getString(R.string.abc_action_bar_home_description);
    }

assets和raw里的音频文件:
相同点:都是将音频文件打在包里,不会有变动
不同点:assets里是原封不动的,res原封不动时系统会放入资源id里,可通过id访问。

你可能感兴趣的:(管理文件)