详解Android文件存储
在Android开发中,经常需要使用文件存储数据。本篇教程将详细介绍Android的文件存储方式,包括内部存储和外部存储。
内部存储
内部存储是指应用程序直接在设备内存中进行数据存储的方式。内部存储的优点是它所存储的数据不会直接暴露给用户,同时也不能被其他应用程序访问和读取。一般情况下,应用程序在内部存储中存储的数据是与应用程序相关的配置信息、数据文件等。
Android系统中,应用程序访问内部存储区域的方式是通过 Context 对象的 openFileOutput() 和 openFileInput() 方法来实现。
写入内部存储
// 写入数据到内部存储
String fileName = "example.txt";
String content = "Hello world!";
FileOutputStream outputStream = null;
try {
outputStream = openFileOutput(fileName, Context.MODE_PRIVATE);
outputStream.write(content.getBytes());
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
上面的示例代码中,我们创建了一个名为 example.txt 的文本文件,并向其中写入了一行字符 "Hello world!"。
我们可以使用 openFileOutput() 方法获得一个 FileOutputStream 对象,来从内部存储写入数据。openFileOutput() 方法具有两个参数:文件名和操作模式。操作模式分为四种:MODE_PRIVATE、MODE_APPEND、MODE_WORLD_READABLE和MODE_WORLD_WRITABLE。此处我们使用了 Context.MODE_PRIVATE 模式,表示只有当前应用才能访问该文件。
读取内部存储
// 读取内部存储中的数据
String fileName = "example.txt";
FileInputStream inputStream = null;
try {
inputStream = openFileInput(fileName);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) != -1) {
byteArrayOutputStream.write(buffer, 0, length);
}
byte[] bytes = byteArrayOutputStream.toByteArray();
String content = new String(bytes, StandardCharsets.UTF_8);
Log.d("TAG", "content = " + content);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
上面的示例代码中,我们通过 openFileInput() 方法获得一个 FileInputStream 对象来读取内部存储中的数据。读取的过程是使用 inputStream.read() 方法,不断地读取数据,并将其写入一个 ByteArrayOutputStream 对象中。最后将 ByteArrayOutputStream 对象中的数据转换为 String 类型即可得到读取到的数据。
外部存储
外部存储是指存储在设备的可移动存储介质上的数据,例如 SD 卡。与相机拍照存储照片、音频存储歌曲、视频存储电影等应用程序都会使用外部存储。在Android系统中,外部存储被称为 Environment.getExternalStorageDirectory() 目录,我们可以通过此目录来实现对外部存储的访问。
由于Android系统的安全机制限制,应用程序只能通过在 AndroidManifest.xml 文件中声明
写入外部存储
// 写入数据到外部存储
String fileName = "example.txt";
String content = "Hello world!";
File file = new File(Environment.getExternalStorageDirectory(), fileName);
FileOutputStream outputStream = null;
try {
outputStream = new FileOutputStream(file);
outputStream.write(content.getBytes());
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
上面的示例代码中,我们将一个名为 example.txt 的文本文件写入到外部存储中。首先需要创建一个 File 对象,将其指向外部存储目录中的目标文件,然后使用 FileOutputStream 对象来实现向目标文件写入数据。
读取外部存储
// 读取外部存储中的数据
String fileName = "example.txt";
File file = new File(Environment.getExternalStorageDirectory(), fileName);
FileInputStream inputStream = null;
try {
inputStream = new FileInputStream(file);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) != -1) {
byteArrayOutputStream.write(buffer, 0, length);
}
byte[] bytes = byteArrayOutputStream.toByteArray();
String content = new String(bytes, StandardCharsets.UTF_8);
Log.d("TAG", "content = " + content);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
上面的示例代码中,我们通过指向外部存储目录中的目标文件的 File 对象,来获得一个 FileInputStream 对象来读取外部存储中的数据。读取的过程与读取内部存储中的数据类似。
总结
本篇教程详细介绍了Android的内部存储和外部存储方式,包括如何向内部存储和外部存储写入数据以及如何从内部存储和外部存储中读取数据。希望本篇教程能够对Android开发者对文件存储的使用能够有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Android文件存储 - Python技术站