Java保存到文件中的错误

时间:2018-07-05 05:41:23

标签: java

目前我正在研究某些东西,但我不知道它是否可能。

我的问题是我可以保存控制台中显示的所有错误并将其保存到文本文件中吗?

还可以保存将显示的警告吗??

public static void main(String[] args) throws Exception {

    System.err.println("Successfully Printed!");
    PrintStream console = System.err;

    File file = new File("C:\\Users\\USer1\\Documents\\ERRORS\\errors.txt");
    FileOutputStream fos = new FileOutputStream(file);
    PrintStream ps = new PrintStream(fos);
    System.setErr(ps);

    System.err.println("ERRORS FOUND \n \n");



    try {
          int[] x = new int[1];
            x[2] = 5;
            x[1] = 10;
            x[2]=4;
    } catch (Exception e) {
        e.printStackTrace();
    }
    System.setErr(console);

我已经尝试过了,但是在文本文件中仅保存了1个错误。是否可以捕获所有错误以及是否存在任何警告(即未使用的变量)

请记住,我正在为此使用Java语言。

非常感谢!!

1 个答案:

答案 0 :(得分:0)

1)错误通常是通过日志记录API记录的,而不是使用错误输出System.err
它更简单,更干净。
此外,如果一次不执行重新分配原始值的语句,则在应用程序框架中为System.setErr分配新值可能很容易出错。

2)您必须将可能引发异常的每个语句括在try/catch语句中以捕获所有语句。

提取方法中语句的执行将避免重复。

在Java 8中,您可以编写:

int[] x = new int[1];
execute(()->x[2] = 5, ()->x[1] = 10, ()->x[2] = 4);

public void execute(Runnable... calls) {
    for (Runnable call : calls) {
        try {
            call.run();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

没有Java 8功能,您可能会使用匿名类而不是lambda:

int[] x = new int[1];           
execute(new Runnable() {
            public void run() {
                x[2] = 5;
            }
        },

        new Runnable() {
            public void run() {
                x[1] = 10;
            }
        },

        new Runnable() {
            public void run() {
                x[2] = 4;
            }
        });