2016-12-14 60 views
0

我想從Android設備的下載文件夾下保存的文件中獲取JSON字符串。現在我可以使用提供的文件瀏覽器here來獲得這個路徑。在Android外部存儲中打開文件並閱讀JSON字符串

我試圖使用給定here的idion來打開文件並讀出一個字符串。 (顯然Android不使用Java 7?我無法使用這個問題的答案,我發現唯一的文件類是在android.provider.MediaStore下)

在任何情況下,我得到(有點) JSON字符串使用問題的成語。問題是我不能使用GSON的輸出(錯誤:期望BEGIN_OBJECT,但是在第1行第1列)

我懷疑這是因爲我從文件返回字符串函數看起來像這樣:

����z������9>{ 
    "chEqEnable": [ 
    [ 
     true, 
     true, 
... etc ... 

而且occasionaly的發言權值,一個布爾是這樣的:

z������  true, 

,而不是

true, 

在處理Android和外部存儲時,是否有更好的方法來取得我的文件並從中讀取JSON字符串,是否免費?

僅供參考,這裏是我實現這個成語來自另一個問題是這樣的:

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

Is there some better way when dealing with Android and external storage, to take my file and read a JSON string from it, abberation free?

您的主要問題在於ExportTuning()方法。你不寫出JSON。您正在將一個Java對象寫入ObjectOutputStream。如果要編寫JSON,請刪除ObjectOutputStream並使用寫入文本的內容,而不是對象(例如PrintWriter)。請注意,您可以使用您最喜歡的文本編輯器或其他任何方式來檢查JSON文件,以查看它是否包含您所期望的內容。在稍後解析JSON的方面,刪除所有已讀入的字符串代碼,創建一個Reader對象(例如,InputStreamReader)和pass that to fromJson()

+0

最後設法讓文件離開平板電腦(永遠不要購買華碩!)而且看起來像是所有的字節碼。我會給你的解決方案一個鏡頭。 –

+0

沒錯,謝謝! –