gpt4 book ai didi

java - 如何在 Vertx 中编写异步文件处理程序

转载 作者:行者123 更新时间:2023-12-02 03:25:38 25 4
gpt4 key购买 nike

我是 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;
}
}

处理程序中令我困扰的是我必须在类的构造函数中执行此操作。有更好的方法吗?

最佳答案

首先,您调用了类 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();
}
});
}
}

关于java - 如何在 Vertx 中编写异步文件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38954187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com