读写json文件¶
这里讲的json是指key-value类型的文本文件。
例如
接下来的例子会分为几个步骤:
- 定义数据类
- 写文件
- 读文件
定义数据类¶
为了更直观,我们定义一个类Info1来存放数据
public class Info1 {
private String name;
private long time;
// 构造器和get set方法省略
@NonNull
@Override
public String toString() {
return name + ", " + time;
}
}
toString
方法,打log的时候可以更方便地看到感兴趣的信息。
现在这个类是用来模拟业务数据的。实际工程中可能是后台传回的具体数据。
写文件¶
为了更方便操作json,我们使用Google的gson库来操作json。
目标文件存放在app内部存储中。
mFile1Path = getFilesDir().getAbsolutePath() + File.separator + "rwFile"
+ File.separator + "jsonFile1.json";
读写文件等io操作,应该放在子线程内。这里为了演示方便,只给出关键代码。
private void write1(Info1 info1) {
Gson gson = new Gson();
String jsonText = gson.toJson(info1);
Log.d(TAG, "write1: jsonText: " + jsonText);
File file = new File(mFile1Path);
try {
if (file.exists()) {
boolean d1 = file.delete();
Log.d(TAG, "delete old file: " + d1);
}
File dir = file.getParentFile();
if (dir != null && !dir.exists()) {
boolean m1 = dir.mkdirs();
Log.d(TAG, "write1: create dir: " + m1);
}
boolean c1 = file.createNewFile();
Log.d(TAG, "create new file: " + c1);
OutputStream os = new FileOutputStream(file);
os.write(jsonText.getBytes());
os.flush();
os.close();
} catch (IOException e) {
e.printStackTrace();
Log.e(TAG, "write1: ", e);
}
}
Gson.toJson
方法,把一个对象转换为json格式的字符串。
然后用FileOutputStream写入文件中。
执行这个方法后,我们可以用as的Device File Explorer
面板找到这个文件。
本例中,文件路径是/data/data/com.rustfisher.tutorial2020/files/rwFile/jsonFile1.json
用as双击它可以看到内容。例如:
读文件¶
从文件中读出文本,然后转换为相应的对象。
private Info1 read1() {
File file = new File(mFile1Path);
if (file.exists() && file.isFile()) {
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
String inString;
StringBuilder sb = new StringBuilder();
while ((inString = reader.readLine()) != null) {
sb.append(inString);
}
Gson gson = new Gson();
return gson.fromJson(sb.toString(), Info1.class);
} catch (Exception e) {
e.printStackTrace();
}
} else {
Log.d(TAG, "read1: 文件不存在 " + file);
}
return null;
}
Gson.fromJson
方法将其转换成目标对象。
小结一下:
- 首先自定义一个类,用来模拟业务数据
- 确定文件存放路径,例如存放在app内部路径
Context.getFilesDir()
- 将对象转换为json格式字符串,使用
Gson.toJson
方法 - json格式字符串转为对象,使用
Gson.fromJson
方法 - 文件操作,把文本写入文件FileOutputStream
- 读取文件中的文本,BufferedReader
本站说明
一起在知识的海洋里呛水吧。广告内容与本站无关。如果喜欢本站内容,欢迎投喂作者,谢谢支持服务器。如有疑问和建议,欢迎在下方评论~