java.io.FileNotFoundException:(拒接访问)

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

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)

   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

问题2:

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)
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

二、分析
在进行分析时,我得说清楚什么时候抛拒绝访问,什么时候抛找不到指定路径。原因是这样的,在构造一个File对象时,指定的文件路径是什么都可以,就算不存在也能够构造File对象,但是,现在你要对文件进行输入输出操作,也就是InputStream和OutputStream操作时,如果填写的路径不存在,那么就会报系统找不到指定路径,如果指定的是目录时,就会报拒绝访问异常。看了这个前提之后,在继续往下读。

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

三、解决办法
第一个的解决办法是,先判断一下当前文件是否存在,如果存在则略过,如果不存在,在创建,具体做法如下:

//在填写文件路径时,一定要写上具体的文件名称(xx.txt),否则会出现拒绝访问。
File file = new File("./mywork/work.txt");
if(!file.exists()){
    //先得到文件的上级目录,并创建上级目录,在创建文件
    file.getParentFile().mkdir();
    try {
        //创建文件
        file.createNewFile();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

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

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

而不能写成:

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

因为这样你访问的是一个目录,因此就拒绝访问。

四、源码(我的demo)

1、文件输出流

/**
 * 文件输出流方法
 */
public void fileOutputStream() {
    File file = new File("./mywork/work.txt");
    FileOutputStream out = null;
    try {
        if (!file.exists()) {
            // 先得到文件的上级目录,并创建上级目录,在创建文件
            file.getParentFile().mkdir();
            file.createNewFile();
        }
    <span class="hljs-comment">//创建文件输出流</span>
    out = <span class="hljs-keyword">new</span> FileOutputStream(file);
    <span class="hljs-comment">//将字符串转化为字节</span>
    <span class="hljs-keyword">byte</span>[] byteArr = <span class="hljs-string">"FileInputStream Test"</span>.getBytes();
    out.write(byteArr);
    out.close();
} <span class="hljs-keyword">catch</span> (FileNotFoundException e) {
    e.printStackTrace();
} <span class="hljs-keyword">catch</span> (IOException e) {
    e.printStackTrace();
}

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

2、文件输入流方法

/**
 * 文件输入流
 */
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();
    }
}
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

如有错误,还望指正,谢谢合作。

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

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)

   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

问题2:

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)
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

二、分析
在进行分析时,我得说清楚什么时候抛拒绝访问,什么时候抛找不到指定路径。原因是这样的,在构造一个File对象时,指定的文件路径是什么都可以,就算不存在也能够构造File对象,但是,现在你要对文件进行输入输出操作,也就是InputStream和OutputStream操作时,如果填写的路径不存在,那么就会报系统找不到指定路径,如果指定的是目录时,就会报拒绝访问异常。看了这个前提之后,在继续往下读。

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

三、解决办法
第一个的解决办法是,先判断一下当前文件是否存在,如果存在则略过,如果不存在,在创建,具体做法如下:

//在填写文件路径时,一定要写上具体的文件名称(xx.txt),否则会出现拒绝访问。
File file = new File("./mywork/work.txt");
if(!file.exists()){
    //先得到文件的上级目录,并创建上级目录,在创建文件
    file.getParentFile().mkdir();
    try {
        //创建文件
        file.createNewFile();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

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

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

而不能写成:

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

因为这样你访问的是一个目录,因此就拒绝访问。

四、源码(我的demo)

1、文件输出流

/**
 * 文件输出流方法
 */
public void fileOutputStream() {
    File file = new File("./mywork/work.txt");
    FileOutputStream out = null;
    try {
        if (!file.exists()) {
            // 先得到文件的上级目录,并创建上级目录,在创建文件
            file.getParentFile().mkdir();
            file.createNewFile();
        }
    <span class="hljs-comment">//创建文件输出流</span>
    out = <span class="hljs-keyword">new</span> FileOutputStream(file);
    <span class="hljs-comment">//将字符串转化为字节</span>
    <span class="hljs-keyword">byte</span>[] byteArr = <span class="hljs-string">"FileInputStream Test"</span>.getBytes();
    out.write(byteArr);
    out.close();
} <span class="hljs-keyword">catch</span> (FileNotFoundException e) {
    e.printStackTrace();
} <span class="hljs-keyword">catch</span> (IOException e) {
    e.printStackTrace();
}

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

2、文件输入流方法

/**
 * 文件输入流
 */
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();
    }
}
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

如有错误,还望指正,谢谢合作。

Java程序中,`java.io.FileNotFoundException`异常是在尝试打开一个不存在的文件或者没有权限访问该文件时抛出的。该异常是`IOException`的子类,用于通知调用者无法打开文件。 异常信息`java.io.FileNotFoundException: D:\test (拒绝访问)`表明程序试图打开位于`D:\test`的文件,但是没有足够的权限访问它。这可能是因为以下几个原因: 1. 指定的路径`D:\test`不存在,即文件或文件夹路径错误。 2. 如果文件存在,可能是因为当前用户没有权限访问该文件或文件夹。 3. 在某些情况下,可能是因为文件正在被其他程序使用,比如文件被锁定,因此无法被当前程序打开。 处理这种异常通常涉及以下几个步骤: - 检查文件路径是否正确,确保文件或文件夹确实存在于指定位置。 - 确认运行Java程序的用户具有访问该文件的权限。 - 如果程序是在操作系统的特定安全限制下运行,如沙箱环境或受限用户账户,确保程序有必要的权限。 - 在多线程环境中,确保没有其他线程或程序锁定了该文件。 为了防止这种异常,可以在尝试打开文件之前进行检查和异常处理。例如: ```java import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; public class Main { public static void main(String[] args) { File file = new File("D:\\test"); try { FileReader fr = new FileReader(file); // 使用文件读取器进行操作 } catch (FileNotFoundException e) { System.out.println("无法打开文件:" + e.getMessage()); // 可以在这里添加更多的异常处理逻辑 } } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值