java IO流抛出FileNotFoundException问题

在我们使用java的IO流操作文件时,发现IO流中的FileNotFoundException的抛出条件极其奇怪,点进去看源码,发现构造函数打开文件是使用的IoBridge.open(file.getPath(), mode);而其中的IoBridge应该是底层的代码了,看不见源码,只能自己写demo测试:
测试思路是这样的,FileNotFoundException意思即为文件未找到,文件未找到有两种情况:磁盘中没有该文件和磁盘中没有该文件的文件夹,以下分别做测试.测试代码如下:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileDemo {

    public static void main(String[] args) {

        String fileString = "C:/Users/wsd/Desktop/a/output.txt";
        String file1String = "C:/Users/wsd/Desktop/a/input.txt";

        File file = new File(fileString);
        try {
            FileOutputStream fos = new FileOutputStream(file);
            byte[] b = {'a','b','c','d'};
            fos.write(b);
            fos.close();
            System.out.println("file output without FileNotFoundException");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        File file1 = new File(file1String);
        try {
            FileInputStream fis = new FileInputStream(file1);
            fis.read();
            fis.close();
            System.out.println("file input without FileNotFoundException");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
先测试:
String fileString = "C:/Users/wsd/Desktop/output.txt";
String file1String = "C:/Users/wsd/Desktop/input.txt";
上面两个文件均不存在,文件夹存在,运行结果如下:
file output without FileNotFoundException
java.io.FileNotFoundException: C:\Users\wsd\Desktop\input.txt (系统找不到指定的文件。)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.(FileInputStream.java:146)
    at FileDemo.main(FileDemo.java:29)

桌面能找到output.txt文件,内容为:abcd

再测试:
String fileString = "C:/Users/wsd/Desktop/a/output.txt";
String file1String = "C:/Users/wsd/Desktop/a/input.txt";
上面的目录a不存在,运行结果如下:
java.io.FileNotFoundException: C:\Users\wsd\Desktop\a\output.txt (系统找不到指定的路径。)
    at java.io.FileOutputStream.open(Native Method)
    at java.io.FileOutputStream.(FileOutputStream.java:221)
    at java.io.FileOutputStream.(FileOutputStream.java:171)
    at FileDemo.main(FileDemo.java:16)
java.io.FileNotFoundException: C:\Users\wsd\Desktop\a\input.txt (系统找不到指定的路径。)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.(FileInputStream.java:146)
    at FileDemo.main(FileDemo.java:29)

从上面的测试可以得出结论:
在使用输出流时:
1. 如果文件不存在,文件夹存在,会自动创建文件,并写入
2. 如果文件夹不存在,抛出FileNotFoundException异常

在使用输入流时:
1. 不管文件夹存在与否,只要文件不存在,抛出FileNotFoundException异常

备注:这有点像c语言中的fopen()函数指定打开方式时的结论,或者本来就是?

你可能感兴趣的:(java)