2017-03-19 43 views
-2

如何將此代碼轉換爲Android?Android的Java.io.file使用assetmanager

POSModel model = new POSModelLoader() 
    .load(new File("en-pos-maxent.bin")); 

我有這樣的代碼對我的onCreate

final AssetManager assetManager = getAssets(); 
final InputStream inputStream = null; 

然後我試圖通過這個代碼

inputStream = assetManager.open("en-pos-maxent.bin"); 

然後我嘗試的inputStream傳遞給代碼的新文件(訪問我的資產的inputStream);

不知道如何將bin文件傳遞給模型。 我不知道如何使用inputstream作爲java.io.File參數?

編輯: Here's what I did

Here's the original code

+0

'然後我嘗試的inputStream傳遞給新的代碼文件(的inputStream);'。不可能。但請解釋你爲什麼試圖去做。它完全不清楚你想要處理資產中的「文件」。 – greenapps

+0

因此,您的模型只能從File對象加載信息。不是來自InputStream。那是你的問題。 '.load(inputstream)'不可用? – greenapps

+0

我正試圖從我的資產訪問.bin文件,以便我可以從庫中初始化一個函數。它需要「en-pos-maxent.bin」文件。所以我嘗試了使用assetmanager訪問資產的常用方式,然後將其分配給inputStream.then,然後在.load(new File(inputsream))中傳入inputstream,但它不起作用。 – Kon

回答

0

嘗試用下面的方法:

private File getFileFromAsset(){ 
     AssetManager assetManager = getAssets(); 
     InputStream inputStream = null; 
     OutputStream outputStream =null; 
     File file =null; 

      try { 
       inputStream = assetManager.open("en-pos-maxent.bin"); 
       file = new File(getCacheDir(), "en-pos-maxent.bin"); 
       outputStream = new FileOutputStream(file); 

        byte[] buffer = new byte[4 * 1024]; // or other buffer size 
        int read; 

        while ((read = inputStream.read(buffer)) != -1) { 
         outputStream.write(buffer, 0, read); 
        } 
       outputStream.flush(); 

      } catch (Exception e) { 
       e.printStackTrace(); // handle exception, define IOException and others 

     } finally { 
      try { 
       if(outputStream!=null) 
        outputStream.close(); 
       if(inputStream!=null) 
        inputStream.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      }} 
      return file; 

    }