您的位置:首页 > 移动开发 > Android开发

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

2016-07-06 13:38 459 查看
转载自: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")得到
代码:

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

[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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: