当前位置: 首页 > 知识库问答 >
问题:

获取错误:无法访问FileNotFoundException得catch块.此异常从不从try语句主体引发

宁锐
2023-03-14

我写了一段代码,每当我用特定的图像名称点击url时返回图像,如果找不到图像,就返回错误图像。

@GET
@Path("/getImage/{param1}")
@Produces({ "image/png", "image/jpeg", "image/gif", "image/jpg" })
public Response getProductimage(@PathParam("param1") String recievedData) {


    File file = null;
    try {
        file = new File("C:/Users/Gaurav/Desktop/AppData/"
                + recievedData);

    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        file = new File("C:/Users/Gaurav/Desktop/AppData/error.png");

        System.out.println(e.getMessage());
    }

    return Response.ok(file).build();

}

但我还是会遇到这个错误,当我试图击中错误的图像

SEVERE: Servlet.service() for servlet [Jersey RESTful Application] in context with path [/WebServices] threw exception [org.glassfish.jersey.server.ContainerException: java.io.FileNotFoundException: C:\Users\Gaurav\Desktop\AppData\average11.png (The system cannot find the file specified)] with root cause
java.io.FileNotFoundException: C:\Users\Gaurav\Desktop\AppData\average.png15 (The system cannot find the file specified)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:131)
    at org.glassfish.jersey.message.internal.FileProvider.writeTo(FileProvider.java:115)

代码出了什么问题?

共有1个答案

孙承
2023-03-14

调用新文件(“x:/non/existing/File”)不会引发任何异常,因此您的catch块永远不会被执行。

您应该使用.exists()来检查文件是否存在,或者使用.CanRead()来检查您是否真的可以读取它。

File file = new File("C:/Users/Gaurav/Desktop/AppData", recievedData);
if (!file.canRead()) {
    file = new File("C:/Users/Gaurav/Desktop/AppData/error.png");
}
return Response.ok(file).build();
 类似资料:
  • **程序需要做的事情:** 当它运行时接受两个命令行参数,否则抛出一个错误。该规则包含以下要求:“如果没有命令参数,则执行I/O错误处理。” 问题是,每次尝试使用I/O异常捕获时,都会收到以下错误: 无法访问IOException得catch块.此异常从不从try语句正文引发 我从Eclipse获得的快速修复建议: 1。删除Catch条款2。用close替换Catch子句 下面是我的代码: nul

  • 我正在尝试获得PSQLException异常,但是它告诉我这个块无法到达,有人知道为什么吗?我的意思是,我不能运行或任何东西,Eclipse标记为一个错误。但是,例如,如果我放置异常e,而不是PSQLException e,它不会给出错误。

  • 考虑来自Java文档的以下代码。 根据Java文档, 在示例readFirstLineFromFile中,如果从try块和try with resources语句抛出异常,则方法readFirstLineFromFile抛出从try块抛出的异常;禁止从try with resources块引发的异常。 另一方面,也提到了 由于BufferedReader实例是在try with resource语

  • 问题内容: 在内部使用try / catch或在内部使用try / catch的正确方法是什么? 与 问题答案: 在我看来,我的观点是: 以上是正确的方法。 因为,使用这种方法,如果与数据库的连接存在异常,则将其捕获在catch块内。但是使用第一种方法,则不会。

  • 问题内容: 我在Java中进行异常处理时遇到问题,这是我的代码。尝试运行以下行时出现编译器错误:。错误是: 永远不会在相应的try语句的主体中引发MojException异常 这是代码: 这是MojException的代码: 谁能帮我这个? 问题答案: try语句中的catch块需要 精确 捕获-block 内的代码 可能 抛出的异常(或该异常的超类)。 您想做的是这样的: 这将导致编译器错误,因

  • 有什么办法可以做到这一点吗? 我想我可以使用scanner来代替它,但是我只是好奇是否有办法在捕获异常后重复try语句。