2017-05-03 118 views
0

我需要在文件夾不存在時創建文件夾。在我的情況下,唯一的方法是捕獲錯誤並處理它以創建想要的文件夾。 但所有我能找到的是發生錯誤時執行操作RxJava

public static Observable<Boolean> folderExists(final Context context, final String targetPath, final String currentpath) { 
    Application application = Application.get(context); 
//i browse the folder to get all the items 
     return browseFolderObservable(context,currentpath) 
       .subscribeOn(application.defaultSubscribeScheduler()) 
       .doOnError(new Action1<Throwable>() { 
        @Override 
        public void call(Throwable throwable) { 
         BsSdkLog.d("Error no file found"); 
        } 
      }) 

      .map(new Func1<ArrayList<Item>, Boolean>() { 
       @Override 
       public Boolean call(ArrayList<Item> items) { 

        if(items.isEmpty()) { 

         BsSdkLog.d(" No items"); 
         return false; 
        }else { 
         for(int i=0;i<items.size();i++) 
         { 
          Item item=items.get(i); 
          BsSdkLog.d(item.toString()); 
         } 
         BsSdkLog.d("Right-here"); 
         return true; 

        } 
       } 
      }); 


} 

我要打電話,我有錯誤發生的時間,但我不知道怎麼做,創建文件夾的方法。 我是新來的,所以我真的很感謝你的幫助 謝謝

+0

是否要在android設備上寫入外部或內部存儲器? –

回答

0

基本原則看起來像這樣。我使用Java NIO庫進行測試。

方法'createFolder'只是創建一個文件夾。測試'名稱'調用Single並檢查異常。如果它是IOException,它將返回一個回退值。你可以在那裏做一些不同的事情。你只需提供一個後備單。如果它與IOException不同,它將返回錯誤。

@Test 
void name() throws Exception { 
    final String TO_CREATE = "/home/sergej/Downloads/Wurstbrot"; 
    this.createFolder(TO_CREATE) 
      .onErrorResumeNext(throwable -> { // handle Exception: 
       // Validate Exception 
       if (throwable instanceof IOException) { 
        // Return fallback 
        return Single.just(Paths.get("/home/sergej/Downloads/")); 
       } 

       return Single.error(throwable); 

      }) 
      .test() 
      .await() 
      .assertValueCount(1) 
      .assertValue(path -> path.endsWith(TO_CREATE)) 
      .assertNoErrors(); 

} 

private Single<Path> createFolder(String p) { 
    return Single.defer(() -> { // may throw some IOException 

     Path path = Paths.get(p); 

     if (!Files.exists(path)) { 
      Path createdDirectory = Files.createDirectory(path); // will throw if already exists 

      return Single.just(createdDirectory); 
     } 

     // Or just return Path, because it already exists??? 
     return Single.error(new IOException("Already exists")); 
    }); 
} 
+0

太棒了!謝謝 –

相關問題