2017-05-03 100 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

太棒了!谢谢 –

相关问题