转载自:http://blog.csdn.net/rodulf/article/details/50933980
文件的内部存储和文件的外部存储。
-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,
- //这里有点像 CSDN的 文章,你读取的时候是不用编辑的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