我正在尝试从Android设备的下载文件夹下保存的文件中获取JSON字符串。现在,我可以使用here提供的文件浏览器来获得这条路径。
我试图使用给定here的idion来打开文件并读出一个字符串。 (显然Android不使用Java 7?我无法使用这个问题的答案,我找到的唯一的Files类是在android.provider.MediaStore下)
在任何情况下,我都会使用问题中的习语来获取(排序)JSON字符串。问题是我无法使用GSON输出(错误:预期BEGIN_OBJECT但在第1行第1列是STRING)
我怀疑是因为我从文件到字符串函数的回复是这样的:
����z������9>{
"chEqEnable": [
[
true,
true,
... etc ...
也就是说,一个布尔的值似乎是:
z������ true,
而不是
true,
在处理Android和外部存储时,是否有更好的方法来获取我的文件并从中读取JSON字符串,abberation free?
作为参考,以下是我对其他问题的习语的实现:
public static String file2String(String filePath) throws IOException
{
StringBuilder stringBuilder = new StringBuilder();
BufferedReader reader = new BufferedReader(new FileReader(filePath));
String line = null;
try{
while( (line = reader.readLine()) != null)
{
stringBuilder.append(line);
}
} finally {
reader.close();
}
String returnStr = stringBuilder.toString();
return returnStr;
}
当我将文件写入外部存储器时,我使用此
public static String ExportTuning(Context context, String fileName, String json)
{
File path;
if(fileName.contains(".rfts")) {
path = GetDocumentsPath(fileName);
} else {
path = GetDocumentsPath(fileName+".rfts");
}
try {
FileOutputStream fileOut = new FileOutputStream(path);
ObjectOutput strOut = new ObjectOutputStream(fileOut);
strOut.writeUTF(json);
// strOut.writeChars(json); // this just causes a ton of gibberish when I read the file back
strOut.close();
fileOut.close();
String[] paths = new String[]{path.getAbsolutePath()};
MediaScannerConnection.scanFile(context, paths, null, null);
return "Save Successful";
}
catch(java.io.IOException e) {
return e.getMessage();
}
}
答案 0 :(得分:1)
在处理Android和外部存储时,是否有更好的方法来获取我的文件并从中读取JSON字符串,abberation free?
您的主要问题在于ExportTuning()
方法。你没有写出JSON。您正在向ObjectOutputStream
写出一个Java对象。如果你想写JSON,摆脱ObjectOutputStream
并使用写文本的东西,而不是对象(例如PrintWriter
)。请注意,您可以使用您喜欢的文本编辑器或cat
或其他任何内容来检查JSON文件,以查看它是否包含您所期望的内容。
在稍后解析JSON方面,删除所有读入字符串代码,创建Reader
对象(例如InputStreamReader
)和pass that to fromJson()
。< / p>