Data Storage(数据存储)之内部储存(Internal Storage)
读取手机内部储存,Activity 中调用 openFileOutput(file_name, mode)方法返回File 对象;
file_name: 文件名
mode: 操作文件的类型
Context.MODE_PRIVATE:代表文件是私有的,如果重新调用,则原来的数据会被覆盖
Context.MODE_APPEND:先判断文件是否存在,如果存在,则在在原来的数据后面追加内容 />
Context.MODE_WORLD_READABLE:其他应用程序由权限读取
Context.MODE_WORLD_WRITEABLE:其他应用程序由权限写入
如果当其他程序同时具有读写功能,则应该这样写:
openFileOutput(FILE_NAME, Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);
下面是个小Demo:
public void writeFile(View view) {
try {
FileOutputStream fos = openFileOutput(FILE_NAME, Context.MODE_PRIVATE);
fos.write(string_01.getBytes());
fos.close();
Toast.makeText(InternalStorageActivity.this, "Saved...", Toast.LENGTH_LONG).show();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
读取或者写入文件,默认目录是:/data/data/<package-name>/files/
文件夹下
我们也可以使用Activity 提供的getCacheDir()
和getFilesDir()
方法:获取/data/data/<package-name>/
下的 /cache
和 /files
读取文件则调用openFileInput(FILE_NAME)
方法
public void readFile(View view) {
try {
FileInputStream fis = openFileInput(FILE_NAME);
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
String line = null;
while ((line = br.readLine()) != null) {
String str = new String(line);
Log.i(TAG, str);
}
Toast.makeText(InternalStorageActivity.this, "Read...", Toast.LENGTH_LONG).show();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
操作外部储存(内存卡)
由于Android 系统内存大小的局限,比如我们储存文件就要把它放在外部存储中,在操作之前,我们要在AndroidManifest.xml 中设置读写操作:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 、、、、
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
操作外部储存(内存卡)
由于Android 系统内存大小的局限,比如我们储存文件就要把它放在外部存储中,在操作之前,我们要在AndroidManifest.xml 中设置
读写权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
创建和删除权限
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
Android 中的Environment 类对外部存储卡的操作,
getExternalStorageState() 方法,判断外部储存卡的状态,如果为MEDIA_MOUNTED 则表示可操作
getExternalStorageDirectory() 方法,获取外部储存的目录,可以对其目录进行操作
/**
* 读取外部储存卡
* 在外部储存卡上创建一个demo.tet 文件,并写入字符
* 为了沿着文件已经写入外部储存,所有读取创建的文件
*/
public void getExternalStorage(View view) throws IOException {
// Android 中的Environment 类对外部存储卡的操作,
// getExternalStorageState() 方法,判断外部储存卡的状态,如果为MEDIA_MOUNTED 则表示可操作
//getExternalStorageDirectory() 方法,获取外部储存的目录,可以对其目录进行操作
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
File sdcardDir = Environment.getExternalStorageDirectory();
File saveFile = new File(sdcardDir, "demo.text");
FileOutputStream fos = new FileOutputStream(saveFile);
fos.write("text".getBytes());
fos.close();
Toast.makeText(InternalStorageActivity.this, "getExternalStorage", Toast.LENGTH_LONG).show();
File[] fileDir = sdcardDir.listFiles();
for (File file : fileDir) {
String fileName = file.toString();
Log.i(TAG, "FileName: " + fileName);
}
FileInputStream fis = new FileInputStream(saveFile);
byte[] buffer = new byte[1024];
int len = 0;
String value = null;
while ((len = fis.read(buffer)) != -1) {
value = new String(buffer, 0, len);
}
fis.close();
Log.i(TAG, "getValue = " + value);
}
}
转载于:https://www.cnblogs.com/Tikitoo/p/android-data-internal-storage.html