gpt4 book ai didi

java - 如果可能的话,如何限制在控制台中打印通用异常消息?

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

以下方法的目标是打开一个文件并在返回列表之前设置等于其行的字符串列表。如果由于某种原因无法打开或读取文件,我想打印消息“读取''时出错...”

static List<String> readFile (String filename) {

System.out.println("Opening file \'" + filename + "\'...\n");

List<String> lines = null;
try {
Charset charset = Charset.forName("ISO-8859-1");
lines = Files.readAllLines(Paths.get(filename), charset);
}
finally {
catch (IOException e) {
System.out.println("Error reading \'" + filename + "\'...");
}
return lines;
}

我正在 Windows 10 命令行中执行该程序,并将文件名作为参数。它可以工作,但是,除了我的错误消息之外,控制台上还会显示另一条消息(由 JVM?)。这是命令和输出:

C:>java FileIO fake.txt
Opening file 'fake.txt'...

Error reading 'fake.txt'...fake.txt
Exception in thread "main" java.lang.NullPointerException
at FileIO.display(FileIO.java:35)
at FileIO.main(FileIO.java:14)

我对 Java 和 Windows 命令行都很陌生。我有一些在 Linux 终端中使用 C++ 和 Python 的经验。

是否可以阻止这些消息打印到控制台或以不同的方式处理用户的错误文件?我的理解是 Files.readAllLines() 需要 IOException。

我不明白为什么默认情况下假设开发人员不会创建要显示给用户的错误消息。或者是假设用户不运行控制台应用程序,并且唯一会看到这些异常的人是开发人员?

最佳答案

问题在于您捕获了异常并假装发生的情况并不重要,即您继续使用 null 值并尝试在显然这不起作用时显示它。

只有当您准备好处理异常时,才应该捕获它。即在调用方法中。

public static void main(String... args) {
try {
List<String> lines = readFile(args[0]);
// don't try to display the lines of a file if it failed with an IOException
display(lines);
} catch(IOException ioe) {
System.err.println("Cannot display file " + ioe);
}
}

当您收到错误时,您应该打印出错误内容,因为错误可能会告诉您一些有用的信息。

注意:即使在 C++ 中,这也是处理异常的最佳方法。

关于java - 如果可能的话,如何限制在控制台中打印通用异常消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35968362/

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