Java FileNotFoundException 是在Java 中使用檔案API 時經常發生的一種異常,其中在類別FileInputStream、FileOutputStream 和RandomAccessFile 的建構子中為讀取或寫入目的指定的檔案路徑不存在或無法存取由於現有的鎖或其他技術問題。這是一個受檢查異常,是 JDK 1.0 中引入的 IOException 的直接子類別。此外,它還包含兩種類型的建構函數,可以呼叫其中一種建構函數傳回帶有要顯示的空訊息的異常,而另一種則在發生異常時列印指定的訊息。
廣告 該類別中的熱門課程 JAVA 掌握 - 專業化 | 78 課程系列 | 15 次模擬測驗開始您的免費軟體開發課程
網頁開發、程式語言、軟體測試及其他
文法:
public class FileNotFoundExceptionextends IOException
該類別是 IOException 的直接子類,因此繼承了該類別的所有方法和變數。
FileNotFoundException 是一個檢查異常,當指定存取的檔案路徑不存在或無法存取時,會發生該異常。有了checked異常,就表示java編譯器在編譯時檢查這個異常是否已經被處理了;否則,會出現編譯時錯誤。讓我們看看如果在編譯時使用 try-catch 區塊或在其定義中使用 throws 關鍵字處理異常,則如何在執行時間引發異常。
範例:
File fileObj = new File("C:/JavaPractice.txt")
假設我們使用檔案路徑實例化上面給出的 File 類別對象,且該檔案不存在。在這種情況下,當編譯器嘗試讀取或寫入檔案並發現這種情況時,它會拋出異常並建立 FileNotFoundException 類別的實例。如果沒有指定需要呼叫哪個建構函數,則拋出沒有錯誤訊息的建構子。
因此應用程式失敗並出現以下錯誤:
FileNotFoundException 是 IOException 的子類,對於追蹤檔案路徑中指定的檔案是否存在甚至可存取非常有用。因此,要使用它,需要實例化它,並且它是一個公共類別;它可以從專案中的任何位置實例化。為了創建類別的實例,有 2 種類型的建構子。
下面給出了兩種類型的建構子:
這種類型的建構函式用於建立 FileNotFoundException 類別的實例,其中傳回 null 作為其錯誤詳細資料。
文法:
public FileNotFoundException()
範例:
FileNotFoundExceptionexcepObj = new FileNotFoundException()
這種類型的建構函式用於建立 FileNotFoundException 類別的實例,其中傳回指定的字串作為其錯誤詳細資料。
文法:
public FileNotFoundException(String s)
範例:
FileNotFoundExceptionexcepObj = new FileNotFoundException("This is a FileNotFoundException")
可以使用 Throwable.getMessage() 方法輕鬆檢索指定的錯誤訊息,因為這是 FileNotFoundException 類別的超類別之一。
下面給出了提到的範例:
這裡我們看到如果一個檔案無法訪問,JVM 如何拋出異常。其中,輸出中顯示的錯誤訊息是 JVM 預設指定的錯誤訊息。
代碼:
//package Proc; import java.io.Console; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.PrintWriter; public class prac1 { public static void main(String[] args) { File fileObj = new File("D:/JavaPractice.txt"); FileInputStream fISObj = null; try{ fISObj = new FileInputStream(fileObj); while (fISObj.read()!=-1){ System.out.println(fISObj.read()); } }catch (FileNotFoundException e){ e.printStackTrace(); }catch (IOException e){ e.printStackTrace(); } } }
輸出:
在此範例中,我們將使用帶有指定錯誤訊息的建構函數,以便在給定路徑中不存在檔案時顯示錯誤。我們使用了 throw 關鍵字來拋出例外。
代碼:
//package Proc; import java.io.Console; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.PrintWriter; public class prac1 { public static void main(String[] args) throws FileNotFoundException,IOException{ File fileObj = new File("D:/JavaPractice.txt"); if(!fileObj.exists()){ throw new FileNotFoundException("This file doesnot exist in the path specified "+fileObj.toString()); } else { System.out.println("Welcome, we got into file "+fileObj.toString()); } } }
輸出:
在應用程式中取得 FileNotFoundException 會使應用程式效率低。避免此異常的第一步是檢查指定路徑中是否存在指定文件,但在實時應用程式中仍然可能會出現文件遺失或其他進程鎖定要讀取的文件的情況寫入其中。
為了避免這種情況,可以使用 java.io.File.exists() 方法來檢查嘗試讀取的檔案是否存在於指定的路徑中。使用它,我們必須確保我們的程式碼是否能夠處理 FileNotFoundException 異常。
為了避免這種情況,需要注意我們嘗試讀取的檔案目前是否已寫入該檔案的其他使用者鎖定。為此,我們可以使用 java.io 的 canRead() 或 canWrite() 方法。文件類,告訴指定的文件是否可用於讀取或寫入目的。
使用這兩種預防措施,可以輕鬆避免檔案類別實例嘗試開啟可能導致檢查異常的檔案。這提高了包含從指定路徑存取檔案的程式的應用程式的效率。
FileNotFoundException 是一種檢查異常,一旦嘗試存取當時不存在或由於某種鎖定而無法存取的文件,就會發生這種異常。由於它是一個檢查異常,java 編譯器確保它已在編譯時處理。但是,如果需要避免它,那麼他們可以使用 File 類別中存在的 exit()、canRead() 或 canWrite() 方法。
以上是Java 檔案未找到異常的詳細內容。更多資訊請關注PHP中文網其他相關文章!