我正在尝试修改java代码,以便将某些内容写入到txt文件中。原始代码是:
try {
out = new PrintStream(system.out, true, "UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}我使用FileOutputStream完成此操作,并将代码修改为:
try {
FileOutputStream os = new FileOutputStream("wiki.txt", true);
out = new PrintStream(os, true, "UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}但它不起作用,错误是:
Wikipedia2Txt.java:56: unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown
FileOutputStream os = new FileOutputStream("wiki.txt");
^
1 error我尝试了两种方法: 1、在磁盘上手动创建一个wiki.txt文件;2、在运行代码之前不存在wiki.txt。但这两种方法都不起作用。它在编译时就停止了。
那么到底是怎么回事呢?谢谢。
发布于 2012-08-16 02:55:00
Java不会告诉您没有找到该文件,只是在运行时可能找不到它,并且您的程序还没有准备好处理它。
以下是解决此问题的一种方法:
try {
FileOutputStream os = new FileOutputStream(file, true);
out = new PrintStream(os, true, "UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException fnf) {
// TODO Auto-generated catch block
fnf.printStackTrace();
}下面是另一种方法:
try {
FileOutputStream os = new FileOutputStream(file, true);
out = new PrintStream(os, true, "UTF-8");
} catch (IOException e) {
// TODO Auto-generated catch block
fnf.printStackTrace();
}第一种方法确保编译器准备好分别处理这两个异常;第二种方法确保编译器准备好处理这两个异常的超类。这两种方法并不相同,因为第二种方法比第一种方法涵盖了更多的异常。
最后,还有一种替代方法可以通过使用throws块声明您的函数来使编译器静默(一个公共超类或两个单独的类都可以)。这是一种告诉编译器您的函数不知道如何处理这些异常的方法,它们应该由调用者处理。这种方法的结果是,函数的每个调用者都必须在调用周围放置一个try/catch,或者使用throws声明异常。
发布于 2012-08-16 02:54:46
您正在使用的FileOutputStream构造函数的签名是public FileOutputStream(File file) throws FileNotFoundException。这意味着它是一个你必须处理的检查过的异常。因此,请确保您编写此代码的方法要么处理此异常(即将此异常指定为catch块的一部分),要么专门抛出此异常。
因此,以下两种方法都适用于您:
在catch block中指定数据块
try {
FileOutputStream os = new FileOutputStream(file, true);
out = new PrintStream(os, true, "UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}或者让你的方法throw这个异常--这样你的方法签名就类似于return_type method_name (params_list) throws FileNotFoundException
发布于 2012-08-16 02:58:24
您需要处理找不到文件的情况。
试试这个:
try {
File file = (..your code..)
FileOutputStream os = new FileOutputStream(file, true);
out = new PrintStream(os, true, "UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// Handling a situation when file is not found.
e.printStackTrace();
}您的集成开发环境(例如Eclipse、IDEA、NetBeans)应该在这种情况下提供额外的帮助。因为您已经生成了存根,所以您可能已经在使用IDE了。你的代码不是加了红色下划线吗?
https://stackoverflow.com/questions/11975340
复制相似问题