2016-08-15 35 views
0

我是Vertx的新手。如何在Vertx中編寫異步文件處理程序

我在玩API,我試圖寫一個FileSizeHandler。我不知道這是否是正確的做法,但我想徵求意見。

在我的代碼我想用這樣的處理程序:

public class MyVerticle extends AbstractVerticle { 

      @Override 
      public void start() throws Exception { 
       getFileSize("./my_file.txt", event -> { 
       if(event.succeeded()){ 
         Long result = event.result(); 
         System.out.println("FileSize is " + result); 
       } else { 
        System.out.println(event.cause().getLocalizedMessage()); 
       } 
     }); 

    } 

    private void getFileSize(String filepath, Handler<AsyncResult<Long>> resultHandler){ 
     resultHandler.handle(new FileSizeHandler(filepath)); 
    } 
} 

這裏是我FileSizeHandler類:

public class FileSizeHandler implements AsyncResult<Long> { 

    private boolean isSuccess; 
    private Throwable cause; 
    private Long result; 

    public FileSizeHandler(String filePath){ 
     cause = null; 
     isSuccess = false; 
     result = 0L; 

     try { 
      result = Files.size(Paths.get(filePath)); 
      isSuccess = !isSuccess; 
     } catch (IOException e) { 
      cause = e; 
     } 

    } 

    @Override 
    public Long result() { 
     return result; 
    } 

    @Override 
    public Throwable cause() { 
     return cause; 
    } 

    @Override 
    public boolean succeeded() { 
     return isSuccess; 
    } 

    @Override 
    public boolean failed() { 
     return !isSuccess; 
    } 
} 

讓我困擾的處理程序,是我必須做的它在類的構造函數中。有沒有更好的方法來做到這一點?

回答

2

首先,你調用你的類FileHandler,但事實並非如此。這是一個結果。 您在Vert.x聲明處理這樣的:現在

public class MyHandler implements Handler<AsyncResult<Long>> { 

    @Override 
    public void handle(AsyncResult<Long> event) { 
     // Do some async code here 
    } 
} 

,爲你做什麼,有vertx.fileSystem()

public class MyVerticle extends AbstractVerticle { 

    @Override 
    public void start() throws Exception { 

     vertx.fileSystem().readFile("./my_file.txt", (f) -> { 
      if (f.succeeded()) { 
       System.out.println(f.result().length()); 
      } 
      else { 
       f.cause().printStackTrace(); 
      } 
     }); 
    } 
} 
相關問題