Android 存储中的内部存储和外部存储
2016-07-06 13:38
459 查看
转载自:http://blog.csdn.net/rodulf/article/details/50933980
文件的内部存储和文件的外部存储。
-0:部存储的默认的路径
内部私有目录
1:外部存储程序的路径(不同的Android 版本,不一样的路径,可以查看Android
中外部存储在不同android版本上面的位置)
外部共有目录
外部私有目录:
代码:
别忘了添加外部存储的权限:
[java] view
plain copy
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
[java] view
plain copy
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
文件的内部存储和文件的外部存储。
-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可以得到。 |
中外部存储在不同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")得到 |
别忘了添加外部存储的权限:
[java] view
plain copy
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
[java] view
plain copy
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
相关文章推荐
- Android使用MediaRecorder录像
- 修改Android签名证书keystore的密码、别名alias以及别名密码
- Gradle 如何使用Android Studio把自己的Android library分享到jCenter和Maven Central
- Android L1版本上的kernel module加载:sepolicy, kernel, .ko
- android studio中svn连接已经下载完的项目
- Android5.0 SnackBar使用小结
- Android NFC P2P开发基础
- Android USER 版本与ENG 版本差异
- Android 官方推荐 : DialogFragment 创建对话框
- Android 5.0 Palette的使用小结
- android6.0源码分析之蓝牙框架简介
- android的shape(四周边框为灰色)
- Android ScrollView中的ListView
- Android之Canvas的相关方法
- Android启动过程深入解析
- Android 开机动画制作 bootanimation.zip
- 云游戏对于Android来说可行吗?
- 解决Android Studio Gradle慢的方法
- Android禁止ViewPager的左右滑动
- Gradle 如何使用Android Studio把自己的Android library分享到jCenter和Maven Central