2017-05-08 49 views
2

我正在使用ProgramAB與Android,它需要我通過在資產文件夾中創建/ bots /目錄將aiml文件從資產文件夾複製到外部存儲。這是我從this教程中獲得的代碼,教程講述了android中的chatbots(這個代碼中調用的其他函數與目錄複製無關)。將資產文件夾子目錄複製到外部存儲中的特定文件夾

我已經嘗試了其他解決方案,但沒有爲我工作。

//checking SD card availablility 
     boolean a = isSDCARDAvailable(); 
     //receiving the assets from the app directory 
     AssetManager assets = getResources().getAssets(); 
     File jayDir = new File(Environment.getExternalStorageDirectory().toString() + "/hari/bots/Hari"); 
     boolean b = jayDir.mkdirs(); 
     if (jayDir.exists()) { 
      //Reading the file 
      try { 
       for (String dir : assets.list("Hari")) { 
        File subdir = new File(jayDir.getPath() + "/" + dir); 
        boolean subdir_check = subdir.mkdirs(); 
        for (String file : assets.list("Hari/" + dir)) { 
         File f = new File(jayDir.getPath() + "/" + dir + "/" + file); 
         if (f.exists()) { 
          continue; 
         } 
         InputStream in = null; 
         OutputStream out = null; 
         in = assets.open("Hari/" + dir + "/" + file); 
         out = new FileOutputStream(jayDir.getPath() + "/" + dir + "/" + file); 
         //copy file from assets to the mobile's SD card or any secondary memory 
         copyFile(in, out); 
         in.close(); 
         in = null; 
         out.flush(); 
         out.close(); 
         out = null; 
        } 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
     //get the working directory 
     MagicStrings.root_path = Environment.getExternalStorageDirectory().toString() + "/hari"; 
     System.out.println("Working Directory = " + MagicStrings.root_path); 
     AIMLProcessor.extension = new PCAIMLProcessorExtension(); 
     //Assign the AIML files to bot for processing 
     bot = new Bot("Hari", MagicStrings.root_path, "chat"); 
     chat = new Chat(bot); 
     String[] args = null; 
     mainFunction(args); 
+0

'boolean b = jayDir.mkdirs();'。如果目錄尚不存在,您應該只調用mkdirs。如果mkdirs返回false,則應該向用戶顯示敬酒信息。並返回。現在你盲目地繼續。請尊重您的代碼。 – greenapps

+0

@greenapps我真的很陌生,我甚至無法檢查複製是否真的發生。由於您陳述的問題,代碼是否沒有執行任務? –

+0

你應該告訴我們什麼工作,什麼不工作。使用日誌語句和吐司來查看會發生什麼。做一些基本的調試。 – greenapps

回答

2

此代碼工作得非常好。 以下是整個tutorial

/** 
* Copy the asset at the specified path to this app's data directory. If the 
* asset is a directory, its contents are also copied. 
* 
* @param path 
* Path to asset, relative to app's assets directory. 
*/ 
private void copyAsset(String path) { 
    AssetManager manager = getAssets(); 

    // If we have a directory, we make it and recurse. If a file, we copy its 
    // contents. 
    try { 
    String[] contents = manager.list(path); 

    // The documentation suggests that list throws an IOException, but doesn't 
    // say under what conditions. It'd be nice if it did so when the path was 
    // to a file. That doesn't appear to be the case. If the returned array is 
    // null or has 0 length, we assume the path is to a file. This means empty 
    // directories will get turned into files. 
    if (contents == null || contents.length == 0) 
     throw new IOException(); 

    // Make the directory. 
    File dir = new File(getExternalFilesDir(null), path); 
    dir.mkdirs(); 

    // Recurse on the contents. 
    for (String entry : contents) { 
     copyAsset(path + "/" + entry); 
    } 
    } catch (IOException e) { 
    copyFileAsset(path); 
    } 
} 

/** 
* Copy the asset file specified by path to app's data directory. Assumes 
* parent directories have already been created. 
* 
* @param path 
* Path to asset, relative to app's assets directory. 
*/ 
private void copyFileAsset(String path) { 
    File file = new File(getExternalFilesDir(null), path); 
    try { 
    InputStream in = getAssets().open(path); 
    OutputStream out = new FileOutputStream(file); 
    byte[] buffer = new byte[1024]; 
    int read = in.read(buffer); 
    while (read != -1) { 
     out.write(buffer, 0, read); 
     read = in.read(buffer); 
    } 
    out.close(); 
    in.close(); 
    } catch (IOException e) { 
    Log.e(e); 
    } 
} 
+0

這是完美的工作!我曾經在同一個博客上實際上:) –

相關問題