在Android外部存储中打开文件并读取JSON字符串

时间:2016-12-14 21:26:26

标签: android json file android-external-storage

我正在尝试从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();
        }
    }

1 个答案:

答案 0 :(得分:1)

  

在处理Android和外部存储时,是否有更好的方法来获取我的文件并从中读取JSON字符串,abberation free?

您的主要问题在于ExportTuning()方法。你没有写出JSON。您正在向ObjectOutputStream写出一个Java对象。如果你想写JSON,摆脱ObjectOutputStream并使用写文本的东西,而不是对象(例如PrintWriter)。请注意,您可以使用您喜欢的文本编辑器或cat或其他任何内容来检查JSON文件,以查看它是否包含您所期望的内容。

在稍后解析JSON方面,删除所有读入字符串代码,创建Reader对象(例如InputStreamReader)和pass that to fromJson()。< / p>