2013-11-27 128 views
0

我試圖將存儲在我的應用程序的assets文件夾中的一些預加載內容複製到sdk卡。問題是我似乎無法獲得我想要複製的目錄的文件路徑。我想循環播放項目中我的資產文件夾中存儲的preloadedcontent文件夾,然後將其中的每個文件夾複製到sdk卡。我可以遍歷預加載的內容的文件名確定,但得到filenotfound例外,當我嘗試跨目錄複製:Android:無法複製資產文件夾中子目錄的子目錄

- Assets/ 
-- preloadedcontent/ 
--- 112/ 
--- 113/ 
--- 114/ 

private void copyAssets() { 
      AssetManager assetManager = getAssets(); 
      String[] files = null; 
      try { 
       files = assetManager.list("preloadedcontent"); 
      } catch (IOException e) { 
       Log.e("tag", "Failed to get asset file list.", e); 
      } 
      for(String filename : files) { 
       Log.d("file: ",filename); 
       InputStream in = null; 
       OutputStream out = null; 
       try { 
        in = assetManager.open("preloadedcontent/" + filename + "/"); 

        File outFile = new File(_DirectoryName, filename); 
        out = new FileOutputStream(outFile); 
        //copyFile(in, out); 
        File f = stream2file(in,filename); 
        copyDirectory(f,outFile); 
        in.close(); 
        in = null; 
        out.flush(); 
        out.close(); 
        out = null; 
       } catch(IOException e) { 
        Log.e("tag", "Failed to copy asset file: " + filename, e); 
       }  
      } 

     } 

錯誤是在這條線assetManager.open(「preloadedcontent/「+文件名+」/「);

+0

資產文件夾是可讀僅 – prakash

+0

是,即時沒有寫入它。 Im將內容複製到另一個位置... – user987723

+0

資產管理器無法處理子文件夾。我爲此寫了一個解決方法。 http://stackoverflow.com/questions/12636861/why-is-assetmanger-list-so-slow/12639346#12639346 – Simon

回答

0

這是因爲"preloadedcontent/" + filename + "/"不是有效的文件名(由於尾部的斜槓)。 AssetManager#open()需要打開單個文件的名稱。

0

如果(id.equals( 「AABA/ABO」)){

  AssetManager assetManager = activity.getAssets(); 
      String[] files; 

      try { 

       files = assetManager.list("aaba"); 
       List<String> it = Arrays.asList(files); 

       for (String string : it) { 

        InputStream ims = assetManager.open("aaba/" + string); 

        // create drawable from stream      
        Drawable d = Drawable.createFromStream(ims, null);     
        drawable.add(d); 

       }    


      } catch (IOException e) {     
       e.printStackTrace(); 

      } 

     } 
+1

向它添加一些解釋。 –

相關問題