我正在学习如何使用此代码在java中创建文件和目录。
在ERROR LINE
我收到错误,因为“此块中永远不会抛出IOException”
那么我怎么知道哪个函数抛出什么类型的异常?
或者如果我不确定我应该在每个catch块中使用泛型Exception
。
public class FileTest {
public static void main(String[] args) {
//file creation
boolean flag = false;
File file = new File("/IdeaProjects/JavaCode/jstest.txt");
try {
flag = file.createNewFile();
}catch (IOException e){
e.printStackTrace();
}
System.out.println("file path is : " + file.getPath());
//dir creation
boolean dirFlag = false;
File fileDir = new File("/IdeaProjects/JavaCode/js");
try{
dirFlag = fileDir.mkdir();
}catch (IOException e){//ERROR LINE
e.printStackTrace();
}
if(dirFlag)
System.out.println("created");
else
System.out.println("exist");
}
}
答案 0 :(得分:1)
java.io.File#mkdir
方法仅声明抛出SecurityException
- 请参阅API。
java.lang.SecurityException
是RuntimeException
并且不需要被捕获,但您可能需要,具体取决于上下文(再次参见API)。
在每个java.lang.Exception
区块中捕获一般catch
绝对不是推荐的做法,尽管有时可能需要(但不是在您目前的情况下)。
有关此事的一些SO文献,请参阅here。
答案 1 :(得分:0)
有问题的方法(File.mkdir()
)会抛出SecurityException
,但需要被捕获(如果需要,可以),因为它是未经检查的{{ 1}}。
java.io.File:https://docs.oracle.com/javase/7/docs/api/java/io/File.html#mkdir()
SecurityException:https://docs.oracle.com/javase/7/docs/api/java/lang/SecurityException.html
答案 2 :(得分:0)
如果catch子句可以捕获已检查的异常类E1并且不是对应于catch子句的try块可以抛出作为E1的子类或超类的已检查异常类,则是编译时错误,除非E1是Exception或Exception的超类。
如果你在try块中调用的方法没有声明它throws IOException
(并且你也不直接throw new IOException(..)
),那么如果你试图捕获一个,那么这是一个编译时错误IOException
。