首页 > 解决方案 > Java如何获取包括异常类型在内的前N行异常?

问题描述

假设我在控制台中显示了这个异常:

java.nio.file.DirectoryNotEmptyException: /path/here/directory
    at java.base/sun.nio.fs.UnixCopyFile.move(UnixCopyFile.java:466)
    at java.base/sun.nio.fs.UnixFileSystemProvider.move(UnixFileSystemProvider.java:267)
    at java.base/java.nio.file.Files.move(Files.java:1421)
    at class.method(class.java:158)
    at class.method(class.java:234)
    at class.method(class.java:23)
...
...
... more lines ...

我怎样才能提取前 N 行 INCLUDING java.nio.file.DirectoryNotEmptyException: /path/here/directory

我写这个是为了得到前两行:

String stackTrace = "";
if (error != null ) {
    StackTraceElement[] stackTraceElements = error.getStackTrace();
    stackTrace = stackTraceElements[0].toString() + stackTraceElements[1].toString();
}

但这只会产生:

at java.base/sun.nio.fs.UnixCopyFile.move(UnixCopyFile.java:466)at java.base/sun.nio.fs.UnixFileSystemProvider.move(UnixFileSystemProvider.java:267)

我的印象StackTraceElements[0]是,java.nio.file.DirectoryNotEmptyException: /path/here/directory但事实并非如此,我不知道如何获得适当数量的 N 行来包含它。

标签: javaexception

解决方案


也打印异常:

public class Tracer
{
    public static void main (String[] args)
    {
        Tracer app = new Tracer ();
        app.execute ();
    }

    private void execute ()
    {
        try
        {
            failure (5);
        }
        catch (Exception e)
        {
            StackTraceElement[] stackTraceElements = e.getStackTrace ();
            StringBuilder builder = new StringBuilder ();
            builder.append (e);
            builder.append ("\n");
            for (int i = 0; i < 3; i++)
            {
                builder.append (stackTraceElements[i].toString ());
                builder.append ("\n");
            }
            System.out.println (builder);
        }
    }

    private void failure (int n) throws Exception
    {
        if (n <= 0)
        {
            throw new Exception ("Exception message");
        }
        else
        {
            failure (n - 1);
        }
    }
}

推荐阅读