Android 存储中的内部存储和外部存储

本文详细介绍了Android应用中的内部存储与外部存储的区别、获取方法及使用示例,包括私有目录、共有目录和私有目录的具体路径,以及如何在Android应用中使用这些存储方式。同时,还介绍了如何获取外部存储的共有目录和私有目录,以及如何在Android应用中进行文件读写操作。

文件的内部存储和文件的外部存储。

-0:部存储的默认的路径

内部私有目录

路径名如何得到
路径/data/data/包名/files通过getFilesDir可以得到,通过openFileInput 和openFileOutput 都是操作的这个文件夹
路径/data/data/包名/cache通过getCacheDir可以得到
路径/data/data/包名/app_app_hel通过getDir("app_hel",MODE_PRIVATE)可以得到,没有第一个参数的文件会自动创建,并且在前面添加一个app_
路径/data/data/包名/shared_prefs通过getSharedPreference可以得到。



1:外部存储程序的路径(不同的Android 版本,不一样的路径,可以查看Android 中外部存储在不同android版本上面的位置

外部共有目录

路径名如何得到
共有的路径:   /mnt/sdcard通过Environment.getExternalStorageDirectory得到
公共文件夹 音乐文件夹的目录/mnt/sdcard/Music  通过Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC)得到

外部私有目录:

路径名如何得到
 路径/mnt/sdcard/Android/data/包名/cache 通过getExternalCacheDir得到
 路径/mnt/sdcard/Android/data/包名/files通过getExternalFilesDir得到
 路径/mnt/sdcard/Android/data/包名/files/images通过getExternalFilesDir("images")得到


代码:

别忘了添加外部存储的权限:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

package tech.androidstudio.filedemo;

import android.content.SharedPreferences;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class MainActivity extends AppCompatActivity {

    private FileOutputStream fileOutputStream;
    private FileInputStream fileInputStream;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        //***************************************内部存储****************************************
        Log.d("Kodulf", "***************************************内部存储**************************************** ");

        File filesDir = getFilesDir();
        File cacheDir = getCacheDir();
        //getDir如果不存在,那么创建) 一个文件夹,这个文件夹名称会拼接一个 app_,
        //所以下面新建的文件名是app_app_hello_file
        File app_hello_dir = getDir("app_hello_dir", MODE_PRIVATE);

        Log.d("Kodulf","getFilesDir() ="+filesDir.getPath());
        Log.d("Kodulf","getCacheDir() ="+cacheDir.getPath());
        Log.d("Kodulf", "getDir(\"app_hello_dir\", MODE_PRIVATE) =" + app_hello_dir.getPath());

        /**
         * 结果如下
         * Kodulf: filesDir 路径/data/data/tech.androidstudio.filedemo/files
         * Kodulf: cacheDir 路径/data/data/tech.androidstudio.filedemo/cache
         * Kodulf: app_hello_dir 路径/data/data/tech.androidstudio.filedemo/app_app_hel
         */



        //向files文件夹中的文件写东西:写入的路径为 filesDir的 路径/data/data/tech.androidstudio.filedemo/files
        try {
            fileOutputStream = openFileOutput("fileOutput", MODE_PRIVATE);
            String add = "向文件写东西";
            fileOutputStream.write(add.getBytes());
//                    下面的写法是错误的
//            fileOutputStream.write(Byte.parseByte("向文件写东西"));

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                fileOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        //从files文件夹中读取东西,读取的路径为 filesDir的 路径/data/data/tech.androidstudio.filedemo/files
        try {
            fileInputStream = openFileInput("fileOutput");
            byte[] bytes = new byte[1024];
            int bytesNumbers = fileInputStream.read(bytes);
            String getString = new String(bytes,0,bytesNumbers,"utf-8");
            Log.d("Kodulf","通过openFileInput(\"fileOutput\") 读取文件的内容为:"+getString);

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                fileInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


        //通过SharePreference来存储++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

        //SharedPreference 常用来设置配置信息,例如当前的wifi 是否已经连接了,当前的存储路径,还有保存的用户名等等。
        //SharePreference 设置的时候存储的文件是一个xml的文件。文件格式就是hashmap的格式,
        //文件的访问模式,通常都是私有的。其他程序不允许查看,类似于qq的密码保存。
        //文件支持的数据结构,int string float long boolean String[],没有char类型。
        //文件的存储位置:/data/data/tech.androidstudio.sharepreferencedemo/shared_prefs

        SharedPreferences config_user = getSharedPreferences("config_User", MODE_PRIVATE);
        SharedPreferences.Editor edit = config_user.edit();
        edit.putString("username", "kodulf");
        edit.commit();
        //SharePreference 设置的时候存储的文件是一个xml的文件。例如这里会得到得到了下面的
        /**
         <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
         - <map>
         <string name="username">kodulf</string>
         </map>
         **/


        //通过SharedPreference来获取数据,
        // 注意这里直接使用的是 SharedPreference而不是 它的editor,
        //这里有点像 优快云的 文章,你读取的时候是不用编辑的editor的,你修改的时候才需要editor

        SharedPreferences config_user_read = getSharedPreferences("config_User", MODE_PRIVATE);
        String username = config_user_read.getString("username", "没有设置");
        Log.d("Kodulf","getSharedPereference 读取参数 username="+username);



        //***************************************外部存储****************************************
        Log.d("Kodulf","***************************************外部存储-外部共有目录**************************************** ");

        //获取外部存储的文件夹
        File directory = Environment.getExternalStorageDirectory();
        Log.d("Kodulf","Environment.getExternalStorageDirectory ="+directory.getPath());

        //获取外部存储的公共的 音乐文件夹
        File externalStoragePublicDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC);
        Log.d("Kodulf", "Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC) =" + externalStoragePublicDirectory.getPath());

        Log.d("Kodulf","***************************************外部存储-外部私有目录**************************************** ");
        //相当于内部存储的getCacheDir()
        File externalCacheDir = getExternalCacheDir();
        Log.d("Kodulf", "getExternalCacheDir =" + externalCacheDir.getPath());
        //File[] externalCacheDirs = getExternalCacheDirs(); API 19才有的

        //相当于内部存储的getFilesDir,或者openFileInput
        File externalFilesDir = getExternalFilesDir("images");
        Log.d("Kodulf","getExternalFilesDir ="+externalFilesDir.getPath());

    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值