2015-07-11 233 views
-1

我試圖將文件從資源文件夾命名的子文件夾複製,但嘗試使用該文件時遇到了「未找到錯誤」。顯然它似乎沒有複製該文件的權利。文件中的資源文件夾

這裏是我做了什麼,也許有人能發現我的錯誤

方法調用

copyfile("/lollipop/proxy.sh"); 

方法

public void copyfile(String file) { 
      String of = file; 
     File f = new File(of); 
      String basedir = getBaseContext().getFilesDir().getAbsolutePath(); 


     if (!f.exists()) { 
          try { 
     InputStream in =getAssets().open(file); 
     FileOutputStream out =getBaseContext().openFileOutput(of, MODE_PRIVATE); 
     byte[] buf = new byte[1024]; 
     int len; 
    while ((len = in.read(buf)) > 0) { 
       out.write(buf, 0, len); 
       } 
      out.close(); 
      in.close(); 

    Runtime.getRuntime().exec("chmod 700 " + basedir + "/" + of); 
        } catch (IOException e) { 
           Log.e(TAG, "Error reading I/0 stream", e); 
          } 
         } 
        } 

嘗試使用proxy.sh因爲該文件似乎從來沒有複製,但當我刪除「棒棒糖」目錄,它工作正常。什麼似乎不對? TNX

回答

0

訪問的資源文件夾子目錄,因爲解釋這種那些有問題並沒有明確回答,這是怎麼實現它。

AssetManager assetManager = getAssets(); 
    String[] files = null; 
    try { 
     if (Build.VERSION.SDK_INT >= 21) 
      files = assetManager.list("api-16"); 
     else 
      files = assetManager.list(""); 
    } catch (IOException e) { 
     Log.e(TAG, e.getMessage()); 
    } 
    if (files != null) { 
     for (String file : files) { 
     InputStream in = null; 
     OutputStream out = null; 
     try { 

      if (Build.VERSION.SDK_INT >= 21) 
      in = assetManager.open("api-16/" + file); 
      else 
      in = assetManager.open(file); 
      out = new FileOutputStream("/data/data/yourpackagename/" + file); 
      copyFile(in, out); 
      in.close(); 
      in = null; 
      out.flush(); 
      out.close(); 
      out = null; 
     } catch (Exception e) { 
      Log.e(TAG, e.getMessage()); 
     } 
     } 
    } 
    } 

    private void copyFile(InputStream in, OutputStream out) throws IOException { 
    byte[] buffer = new byte[1024]; 
    int read; 
    while ((read = in.read(buffer)) != -1) { 
     out.write(buffer, 0, read); 
    } 
    } 

方法調用 文件現在可以訪問來自

/data/data/yourpackagename/ 

所以從那裏調用的文件。使用

getFilesDir() 

是行不通的,因爲它從

/data/data/yourpackagename/files/ 
0

openFileOutput()不接受子目錄。由於of/lollipop/proxy.sh,你要創建一個子目錄。

+0

,就可以得到任何更好的方法來複制該文件在正常嗎? – CodeZero

+0

@CodeZero:這取決於你在本地文件系統上想要什麼。如果你想在本地文件系統,你有'資產/'相同的目錄結構,使用'getFilesDir()''而不是openFileOutput()'。如果你只是簡單地拷貝這個文件並且不需要'lollipop /'作爲本地文件系統的一個目錄,那麼調用''''''''''''''來獲取文件名,然後傳遞'getName() ''openFileOutput()'的結果。 – CommonsWare

+0

花了2天時間,沒有你的解決方案。 – CodeZero

相關問題