为什么我的拦截块不起作用?

时间:2016-12-06 22:21:05

标签: java oop io

我正在尝试测试throws FileNotFoundException。首先,我将exec.txt放在我的项目文件夹中,以测试我的"testing"字符串&当我运行我的程序时,它工作正常。

但是现在,我从我的文件夹中删除了exec.txt文件,看看catch()方法中的main部分是否有效,但事实并非如此。 File not found部分的catch()部分不会出现在控制台中。

import java.io.*;

public class Crashable {

public static void openFile(String f) throws FileNotFoundException {
    PrintWriter f1 = new PrintWriter(f);
    f1.write("testing");
    f1.close();
}

public static void main(String[] args) {
    String f = "exec.txt";

    try {
        openFile(f);
    } catch(FileNotFoundException e) {
        System.out.println("File not found");
    }
  }
}

4 个答案:

答案 0 :(得分:0)

如文档中所述,如果无法访问或创建文件,则会引发FileNotFoundException

  

FileNotFoundException - 如果给定的字符串不表示现有的可写常规文件,并且无法创建该名称的新常规文件,或者在打开或创建文件时发生其他错误

在您的情况下,它可以创建一个新文件,因此不会抛出任何异常。

答案 1 :(得分:0)

你可以通过尝试在不存在的目录中创建文件来抛出execption:

   String f = "zzz/exec.txt"

答案 2 :(得分:0)

您永远不会在openFile方法中抛出异常。来自Java docs

  

public PrintWriter(文件文件)                   抛出FileNotFoundException

     

使用指定的文件创建一个没有自动行刷新的新PrintWriter。这个便利构造函数创建了必要的   中间OutputStreamWriter,它将使用编码字符   此虚拟机实例的默认字符集。

     

参数:       file - 要用作此writer的目标的文件。如果该文件存在,那么它将被截断为零大小;否则,一个新的   文件将被创建。输出将被写入文件并且是   缓冲。

因此,如果该文件不存在,则创建一个新文件。基本上,一切都正常,因为虽然文件不存在,但是当您创建PrintWriter对象时,它会创建一个新文件,并且不会抛出错误。

答案 3 :(得分:0)

实际上,每次使用这段代码创建一个新文件:

PrintWriter f1 = new PrintWriter(f); f1.write("testing"); f1.close();

而是试试这个:

public static void openFile(String f) throws FileNotFoundException {
File file = new File(f);
if(!file.exists())
{
    throw new FileNotFoundException();
}
else
{
    //do Something with the file
}}

希望有所帮助......