Android 存储 JSON 到 SD 卡
在 Android 开发中,经常需要将数据以 JSON 的形式存储到 SD 卡中。本文将介绍如何在 Android 应用中实现这一功能,并提供相关代码示例。
使用权限
在开始之前,我们需要在 AndroidManifest.xml 文件中添加适当的权限请求,以便应用可以访问 SD 卡。以下是所需的权限列表:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
检查 SD 卡状态
在存储 JSON 数据之前,我们需要检查 SD 卡的状态,以确保它已经挂载并可用。我们可以使用 Environment.getExternalStorageState()
方法来获取 SD 卡的状态。以下是一个示例方法来检查 SD 卡状态:
private boolean isExternalStorageAvailable() {
String state = Environment.getExternalStorageState();
return Environment.MEDIA_MOUNTED.equals(state);
}
创建 JSON 文件
一旦我们确定 SD 卡可用,我们可以创建一个新的 JSON 文件。为了实现这个功能,我们可以使用 FileOutputStream
和 OutputStreamWriter
类,如下所示:
private void createJsonFile(String fileName, String jsonString) {
try {
File file = new File(Environment.getExternalStorageDirectory(), fileName);
FileOutputStream fos = new FileOutputStream(file);
OutputStreamWriter osw = new OutputStreamWriter(fos);
osw.write(jsonString);
osw.flush();
osw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
以上代码将创建一个名为 fileName
的新文件,并将 jsonString
写入文件中。
读取 JSON 文件
如果我们想要读取 SD 卡上的 JSON 文件,我们可以使用 FileInputStream
和 InputStreamReader
类来实现。以下是一个读取 JSON 文件的示例方法:
private String readJsonFile(String fileName) {
StringBuilder stringBuilder = new StringBuilder();
try {
File file = new File(Environment.getExternalStorageDirectory(), fileName);
FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader bufferedReader = new BufferedReader(isr);
String line;
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line);
}
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
return stringBuilder.toString();
}
以上代码将读取名为 fileName
的文件,并将其内容以字符串的形式返回。
示例应用
以下是一个完整的示例应用,用于演示如何存储和读取 JSON 数据到 SD 卡中。
import android.Manifest;
import android.os.Bundle;
import android.os.Environment;
import androidx.appcompat.app.AppCompatActivity;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
public class MainActivity extends AppCompatActivity {
private static final String PERMISSION_WRITE_EXTERNAL_STORAGE = Manifest.permission.WRITE_EXTERNAL_STORAGE;
private static final String PERMISSION_READ_EXTERNAL_STORAGE = Manifest.permission.READ_EXTERNAL_STORAGE;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
requestPermissions(new String[]{PERMISSION_WRITE_EXTERNAL_STORAGE, PERMISSION_READ_EXTERNAL_STORAGE}, 0);
if (isExternalStorageAvailable()) {
String jsonString = "{ \"name\": \"John\", \"age\": 30 }";
createJsonFile("data.json", jsonString);
String jsonData = readJsonFile("data.json");
System.out.println(jsonData);
}
}
private boolean isExternalStorageAvailable() {
String state = Environment.getExternalStorageState();
return Environment.MEDIA_MOUNTED.equals(state);
}
private void createJsonFile(String fileName, String jsonString) {
try {
File file = new File(Environment.getExternalStorageDirectory(), fileName);
FileOutputStream fos = new FileOutputStream(file);
OutputStreamWriter osw = new OutputStreamWriter(fos);
osw.write(jsonString);
osw.flush();
osw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private String readJsonFile(String fileName) {
StringBuilder stringBuilder = new StringBuilder();
try {
File file = new File(Environment.getExternalStorageDirectory(), fileName);
FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader bufferedReader = new BufferedReader(isr);
String line;
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line);
}
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
return stringBuilder.toString();
}
}
以上示例应用通过调用 createJsonFile()
方法将 JSON 数据存储到名为 data.json
的文件中,然后通过调用 readJsonFile()
方法从该文件中读取 JSON 数据。