2016-06-13 19 views
0

找到我這裏有一個錯誤:文件不能在Android設備

FileHandle file = Gdx.files.internal("hscore.json"); 

顯示,它無法找到:

... 
com.badlogic.gdx.utils.GdxRuntimeException: File not found: hscore.json (Local) 
at com.badlogic.gdx.files.FileHandle.read(FileHandle.java:136) 
... 

它工作在我的桌面上,但沒有像這樣對我Android手機。

我使用Android Studio,將文件保存在android文件夾中的assets文件夾中。 enter image description here

我不知道爲什麼它不能在android上找到它?

更新:我不知道在此期間發生了什麼事,但現在它拋出了同樣的錯誤後,凸顯這行代碼:

String s = file.readString(); 


它可以讀取.txt文件和其他文件我使用得很好,似乎.json文件是Android的問題?


在此之前得到解決,我使用偏好在那裏保存的數據,而不是整個類以.json

+0

嘗試Gdx.files.classpath(「hscore.json」);資產文件夾文件 – Vickyexpert

+0

@Vickyexpert試了一下,仍然無法正常工作。 – Vepir

+0

指定完整路徑,如file:///android_asset/hscore.json – Vickyexpert

回答

0

由於與p.streef聊天這個問題已到了倒閉,八九不離十。

1)我創建了一個新的test.txt文件,它可以很好地讀取它。

也許那麼.json文件本身就是一個真正的問題?

2)但後來我把它改名爲text.json,事後回hscore.json

它在這兩種情況下打開和讀取文件時工作得很好。

我不知道爲什麼初始文件.json不可讀?

3)我同時殺死並重啓了我的android工作室,因爲它在建立我的項目時凍結了。


所有這一切都沒有被發現的文件的問題後,通過自籌解決。

無論如何,我意識到該文件是不可寫的,因爲內部文件是隻讀的。

我決定堅持使用偏好作爲最終解決方案。

0

該文件的路徑是錯誤的。由於文件來自資產文件夾,因此您應該使用AssetManager來檢索它。

下面是一個簡單

public static File getFile(Context context) throws IOException { 
     File cacheFile = new File(context.getCacheDir(), "hscore.json"); 
     try { 
      InputStream inputStream = context.getAssets().open("hscore.json"); 
      try { 
       FileOutputStream outputStream = new FileOutputStream(cacheFile); 
       try { 
        byte[] buf = new byte[1024]; 
        int len; 
        while ((len = inputStream.read(buf)) > 0) { 
         outputStream.write(buf, 0, len); 
        } 
       } finally { 
        outputStream.close(); 
       } 
      } finally { 
       inputStream.close(); 
      } 
     } catch (IOException e) { 
      throw new IOException("Could not open robot png", e); 
     } 
     return cacheFile; 
    } 

你可以調用此方法來獲取檢索您的文件

FileHandle file = Gdx.files.internal(getFile(aContext).getPath()); 
+0

'上下文'是很好的上下文。將活動或view.getContext()傳遞給該方法 –

+0

我沒有活動或視圖,我的主類擴展了ApplicationAdapter,並在create方法的結尾調用並推送一個新狀態,其中我重寫了要執行的Update方法我的方法,渲染方法來繪製我的紋理... – Vepir

+0

你的主類從哪裏初始化?你總是可以在你的類的構造函數中傳遞一個上下文 –