gpt4 book ai didi

java - 在堆栈跟踪中捕获 FileNotFound?

转载 作者:行者123 更新时间:2023-12-01 14:35:59 25 4
gpt4 key购买 nike

这似乎是一个奇怪的问题,但是是否有可能“捕获”(知道)堆栈跟踪中是否存在 filenotfound 异常?我问这个是因为我正在实现的类(不是我的)不会抛出异常,它会捕获异常并打印堆栈跟踪。

那么,换句话说,当堆栈跟踪中出现 filenotfoundException 时,我可以显示带有自定义消息的 JOptionPane 吗?

谢谢!

最佳答案

这是使用 System.setErr 和管道流的方法:
(完全有可能有更好的方法或者可以简化)

public static void badFunctionCall()
{
new FileNotFoundException("The file could not be found!").printStackTrace();
}

public static void main(String[] args) throws IOException
{
PipedOutputStream writer = new PipedOutputStream();
PipedInputStream reader = new PipedInputStream(writer);
PrintStream p = new PrintStream(writer);
System.setErr(p);

badFunctionCall();

p.close(); // do this *before* reading the input stream to prevent deadlock
int c;
StringBuilder builder = new StringBuilder();
while ((c = reader.read()) != -1)
builder.append((char)c);
if (builder.toString().contains("java.io.FileNotFoundException: "))
System.out.println("An error occurred! Caught outside function.");
reader.close();
}

Test .

请注意,可能不建议在同一线程中连接流,或者至少必须非常小心,因为很容易陷入死锁。

但是更简单:

file.isFile() && file.canRead()

在函数调用之前,虽然不是 100% 可靠(在调用期间可能通过 locking the file 进行解决),但这是首选。

关于java - 在堆栈跟踪中捕获 FileNotFound?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16485320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com