java - 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 行来包含它。
解决方案
也打印异常:
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);
}
}
}
推荐阅读
- powershell - 获取当前用户的 ObjectGUID
- for-loop - 无法弄清楚我的 for 循环中有什么语法错误
- css - 使用 Flexbox 将图像水平和垂直居中时图像的顶部被裁剪
- excel - 是否可以制作一个可以搜索谷歌电子表格并返回特定单元格值的电报机器人?
- javascript - 无法让数据表编辑器初始化
- scala - 具有无标签最终样式的 Kleisli 依赖项
- sharepoint - 如何在 PowerApps 中解析 JSON?
- python - 达到阈值后,累积熊猫列“重置”
- docker - 在托管 Angular 应用程序的 nginx docker 容器上配置 HTTPS
- angular - 添加多个子窗体