首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java PrintStream问题

Java PrintStream问题
EN

Stack Overflow用户
提问于 2012-08-16 02:52:59
回答 4查看 2.1K关注 0票数 2

我正在尝试修改java代码,以便将某些内容写入到txt文件中。原始代码是:

代码语言:javascript
复制
try {
    out = new PrintStream(system.out, true, "UTF-8");
} catch (UnsupportedEncodingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

我使用FileOutputStream完成此操作,并将代码修改为:

代码语言:javascript
复制
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();
}

但它不起作用,错误是:

代码语言:javascript
复制
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。但这两种方法都不起作用。它在编译时就停止了。

那么到底是怎么回事呢?谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-08-16 02:55:00

Java不会告诉您没有找到该文件,只是在运行时可能找不到它,并且您的程序还没有准备好处理它。

以下是解决此问题的一种方法:

代码语言:javascript
复制
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();
}

下面是另一种方法:

代码语言:javascript
复制
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声明异常。

票数 6
EN

Stack Overflow用户

发布于 2012-08-16 02:54:46

您正在使用的FileOutputStream构造函数的签名是public FileOutputStream(File file) throws FileNotFoundException。这意味着它是一个你必须处理的检查过的异常。因此,请确保您编写此代码的方法要么处理此异常(即将此异常指定为catch块的一部分),要么专门抛出此异常。

因此,以下两种方法都适用于您:

catch block中指定数据块

代码语言:javascript
复制
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

票数 4
EN

Stack Overflow用户

发布于 2012-08-16 02:58:24

您需要处理找不到文件的情况。

试试这个:

代码语言:javascript
复制
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了。你的代码不是加了红色下划线吗?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11975340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档