Java解决java.io.FileNotFoundException: E:\work\work (拒绝访问。)

1、问题 
在使用FileInputStream或FileOutputStream时会遇到以下问题1和问题2。 
问题1:java

java.io.FileNotFoundException: .\xxx\xxx.txt (系统找不到指定的路径。)
    at java.io.FileOutputStream.open(Native Method)
    at java.io.FileOutputStream.<init>(Unknown Source)
    at java.io.FileOutputStream.<init>(Unknown Source)
    at com.yaohong.test.InputStreamTest.fileInputStream(InputStreamTest.java:13)
    at com.yaohong.test.InputStreamTest.main(InputStreamTest.java:27)

 

问题2:ide

java.io.FileNotFoundException: .\xx\xx (拒绝访问。)
    at java.io.FileOutputStream.open(Native Method)
    at java.io.FileOutputStream.<init>(Unknown Source)
    at java.io.FileOutputStream.<init>(Unknown Source)
    at com.yaohong.test.InputStreamTest.fileInputStream(InputStreamTest.java:13)
    at com.yaohong.test.InputStreamTest.main(InputStreamTest.java:27)
  •  

2、分析 
在进行分析时,我得说清楚何时抛拒绝访问,何时抛找不到指定路径。缘由是这样的,在构造一个File对象时,指定的文件路径是什么均可以,就算不存在也可以构造File对象,可是,如今你要对文件进行输入输出操做,也就是InputStream和OutputStream操做时,若是填写的路径不存在,那么就会报系统找不到指定路径,若是指定的是目录时,就会报拒绝访问异常。看了这个前提以后,在继续往下读。code

当遇到问题1时,的确是当前所指定的文件不存在或者目录不存在。 
当遇到第二个问题时,是由于你访问的是一个文件目录,若是这个目录没有权限访问或者是目录不存在,就会抛出问题2的异常。对象

3、解决办法 
第一个的解决办法是,先判断一下当前文件是否存在,若是存在则略过,若是不存在,在建立,具体作法以下:字符串

//在填写文件路径时,必定要写上具体的文件名称(xx.txt),不然会出现拒绝访问。
File file = new File("./mywork/work.txt");
if(!file.exists()){
    //先获得文件的上级目录,并建立上级目录,在建立文件
    file.getParentFile().mkdir();
    try {
        //建立文件
        file.createNewFile();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

 

第二个的解决办法是,在填写文件的路径时必定要具体到文件,以下:get

File file = new File("./mywork/work.txt");
  • 1

而不能写成:源码

File file = new File("./mywork/");
  • 1

由于这样你访问的是一个目录,所以就拒绝访问。it

4、源码(个人demo)io

一、文件输出流asm

/**
 * 文件输出流方法
 */
public void fileOutputStream() {
    File file = new File("./mywork/work.txt");
    FileOutputStream out = null;
    try {
        if (!file.exists()) {
            // 先获得文件的上级目录,并建立上级目录,在建立文件
            file.getParentFile().mkdir();
            file.createNewFile();
        }

        //建立文件输出流
        out = new FileOutputStream(file);
        //将字符串转化为字节
        byte[] byteArr = "FileInputStream Test".getBytes();
        out.write(byteArr);
        out.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}

 

二、文件输入流方法

/**
 * 文件输入流
 */
public void fileInputStream() {
    File file = new File("./mywork/work.txt");
    FileInputStream in = null;
    //若是文件不存在,咱们就抛出异常或者不在继续执行
    //在实际应用中,尽可能少用异常,会增长系统的负担
    if (!file.exists()){
        throw new FileNotFoundException();
    }
    try {
        in = new FileInputStream(file);
        byte bytArr[] = new byte[1024];
        int len = in.read(bytArr);
        System.out.println("Message: " + new String(bytArr, 0, len));
        in.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
相关文章
相关标签/搜索