Java system.err.println和仅仅抛出异常之间的区别?(爪哇)
我正在尝试打开并读取从命令行传递的文件 这就是我到目前为止所做的:Java system.err.println和仅仅抛出异常之间的区别?(爪哇),java,io,filenotfoundexception,Java,Io,Filenotfoundexception,我正在尝试打开并读取从命令行传递的文件 这就是我到目前为止所做的: import java.io.*; public class Test { public static void main(String[] args) throws FileNotFoundException { if ( (args[0].length() == 0) || (args[0] == null) || (args[0].isEmpty()) ) { Syst
import java.io.*;
public class Test {
public static void main(String[] args) throws FileNotFoundException {
if ( (args[0].length() == 0) || (args[0] == null) || (args[0].isEmpty()) ) {
System.err.println("Usage Error: No file name was provided.");
System.exit(1);
}
File file = new File(args[0]);
if (!file.exists()) {
System.err.println("Usage Error: The file, " + args[0] + ", does not exist.");
}
if (!file.canRead()) {
System.err.println("Usage Error: The file, " + args[0] + ", cannot be read.");
}
} // main
}
我不完全确定我应该如何处理文件未发现异常。我的老师提到了try/catch积木,但我不确定我是否需要这些积木。仅测试文件是否作为参数传递,以及是否未使用System.err.print()方法向用户提供错误信息就足够了吗
另外,如果调用System.err.print(),它是否会在之后退出程序(也就是说,我是否需要在之后包含System.exit(1))?或者(就设计而言)这样做更好:
public void readFile() throws FileNotFoundException {
// try to open file here
}
public static void main(String[] args) {
try {
readFile();
} catch (Exception e) {
// exception handled here
}
}
我只需要确保用户确实传递了一个字符串作为文件名,并且该字符串存在/可以读取。异常使以编程方式处理错误变得更容易 意思是:当你的程序只包含一个主函数,你想告诉用户“文件不在那里”;如果你的程序向stderr输出了一条合理的消息,那么它不会有太大的区别;然后存在一些非零返回码;或者如果抛出异常 相反,;在你的简单例子中;实际上,与抛出异常和让JVM向用户打印(可能令人困惑的)堆栈跟踪相比,拥有一条准确的错误消息更可取
但是:您当前的计划只是一个小例子。当事情变得越来越大时,您的程序就由对不同组件中许多不同类的调用组成。然后打印到stderr就不再是个好主意了。然后,您需要确保遇到问题的某一层有一种明确的方式来传达这种情况;这就是例外的含义。在这种情况下,您非常喜欢例外情况;因为更高层的人可以抓住它们,然后决定怎么做。例如,程序可以决定在某个UI面板上显示错误消息;或将消息放入日志文件中;或者给手机发短信。如果只打印到stderr,所有这些都几乎是不可能的。在
catch
中,而不是//这里处理的异常
您可以编写任何想要的代码。
如果你只是抛出异常——java本身正在做一些标准的事情。慢慢来,阅读Joshua Bloch的《高效java》(第二版)书籍。
“例外”一章中的第57项(仅在例外情况下使用例外情况)将阐明本主题中的所有内容。不同之处在于它们不相同。一个打印输出到控制台。另一个改变程序流程。这些都有记录。没有必要猜测。