java. io. FileNotFoundException:什么情况?

如题所述

java.io.FileNotFoundException :当试图打开指定路径名表示的文件失败时,抛出此异常。不同的产生原因有不同的解决方案, 所以需要先分析异常产生的原因:  

异常产生的原因:

1、该文件不存在. 那么IO操作就会抛出该异常

2、如果该文件存在,但是由于某些原因不可访问,比如试图打开一个只读文件进行写入,则此时这些构造方法仍然会抛出该异常。

3、WIN10系统,直接向系统盘C盘的根目录,直接写入文件,那么也会抛出该异常.

处理异常的方案:

1、文件不存在时, 检查路径名填写错误,然后进行修改,或者创建出来. 

2、文件存在时, 我们需要检查该文件是否正在被修改占用, 或者该文件的属性是否是只读. 如果正在被修改占用,我们需要关闭其他占用该文档的应用.如果文件属性是只读,那么我们需要取消文档的只读属性

3、在WIN10系统,不要向系统盘C盘,直接创建文件, 需要先创建目录.然后写入文件

参考示范: 

import java.io.File;
import java.io.IOException;

public class FileTest {

public static void main(String[] args) {
//不同的操作系统,那么有不同的文件目录分隔符 ,所以建议不要直接写成"\\". 而应该使用File.separator 该字段 来获取
String sp = File.separator;//获取名称分隔符
File file = new File("d:" + sp + "book" + sp + "story.txt");

if (!file.getParentFile().exists()) {// 如果book文件夹不存在
file.getParentFile().mkdir();// 创建book文件夹
}

if (!file.exists()) {// 如果story.txt文件不存在
try {
file.createNewFile();// 创建story.txt
} catch (IOException e) { // 捕获异常并处理
e.printStackTrace();
}
}

}
}

拓展:  实际情况中,很多时候,文件夹存在,我们的重点是判断文件是否存在,且不存在,就创建. 有些输出流,就可以在文件不存在时,自动创建该文件. 比如FileOutputStream ,FileWriter ...

FileWriter fw = new FileWriter("d:\\菜单.txt");//注意 win10,不支持向c盘根目录写入文件
fw.close();

总结:  Java的异常处理机制是比较完善的, 除开通过推理逻辑, 避开一些异常, 更重要的是在运行中发生可以处理的异常时, 巧妙使用try catch 代码处理 .这样的程序才会更加的稳健

温馨提示:答案为网友推荐,仅供参考
相似回答