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();
    }
}
相關文章
相關標籤/搜索