【问题标题】:java.io.IOException when declaring path to log file声明日志文件路径时出现 java.io.IOException
【发布时间】:2017-02-14 10:03:04
【问题描述】:

我正在尝试用 Java 登录到一个文件,所以我查看了 here 并编写了以下代码:

private static final Logger log = Logger.getLogger( QualityGatesProvider.class.getName() );
//some other code
FileHandler fh = new FileHandler("/Users/me/.jenkins/myLogs");
log.addHandler(fh);

但是,在FileHandler fh = new FileHandler("/Users/me/.jenkins/myLogs"); 线上,我得到了这个:

unreported exception java.io.IOException; must be caught or declared to be thrown

知道代码有什么问题吗?

【问题讨论】:

  • 看起来这段代码不在块内。您不能只在class 中有随机代码。只允许static 变量声明和实例变量声明。另请注意,虽然您的logstatic,但您的fh 不是这样,如果这有效,您将在每次创建相关class 的实例时添加FileHandler
  • 现在整个问题都变了。那么,它是什么?

标签: java


【解决方案1】:

java.io.IOException 是一个checked exception。因此,任何可以抛出它的行必须是:

.-包含在捕获它的 try-catch 块中。

try{
        ...

        FileHandler fh = new FileHandler("/Users/me/.jenkins/myLogs");
        ...

    } catch (java.io.IOException e){
        //handle exception
    }

.-包含在显式抛出它的方法中。

void myMethod() throws java.io.IOException{
...
        FileHandler fh = new FileHandler("/Users/me/.jenkins/myLogs");
...
}

【讨论】:

    【解决方案2】:

    您需要在块内编写此代码:

    log.addHandler(fh);
    

    它不能与其他类成员声明一起直接放在class 的主体中。

    把它放在这样的方法中:

    public void foo() {
        log.addHandler(fh); // this will still give a compilation error
    }
    

    解决编译错误,

    声明方法以抛出异常或直接在方法内部处理它。

    public void foo() throws Exception{
        log.addHandler(fh);
    }
    

    public void foo() {
        try{
            log.addHandler(fh);
        } catch (Exception e){
            e.printstacktrace();
            // OR handle exception here
        }
    }
    

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-07
      • 1970-01-01
      相关资源
      最近更新 更多