java.io.FileNotFoundException這是我們嘗試訪問文件時發生的常見異常。 FileNotFoundExcetion 由構造函數拋出RandomAccessFile,Java.io.FileInputStream, 和FileOutputStream。 FileNotFoundException在運行時發生,所以它是一個檢查異常,我們可以通過java代碼處理這個異常,並且我們必須照顧好代碼,以免發生這個異常。
聲明:
public class FileNotFoundException extends IOException implements ObjectInput, ObjectStreamConstants
構造函數:
- FileNotFoundException():它給出了帶有空消息的FileNotFoundException。
- FileNotFoundException(字符串):它給出了FileNotFoundException以及詳細消息。
它沒有任何方法。現在我們來了解一下等級製度這個類的 FileNotFoundException 擴展了 IOException ,它進一步擴展了 Exception 類,而 Exception 類又擴展了Throwable Class以及進一步的對象類。
層次結構圖:
為什麽會出現這個異常呢?
FileNotFoundException發生時主要有2種情況。現在讓我們通過提供的示例來看看它們:
- 如果給定文件在給定位置不可用,則會發生此錯誤。
- 如果給定的文件是難以接近的,例如,如果它是隻讀的,那麽您可以讀取該文件,但不能修改該文件,如果我們嘗試修改它,則會發生錯誤,或者如果您嘗試訪問的讀/寫操作的文件是如果被其他程序打開就會出現這個錯誤。
場景一:
如果給定文件在給定位置不可用,則會發生此錯誤。
例子:
Java
// Java program to illustrate
// FileNotFoundException
// All output and input streams
// are available in java.io package
import java.io.*;
public class Example1
{
public static void main(String[] args)
{
// creating object of FileReader
FileReader reader = new FileReader("file.txt");
// passing FileReader to
// buffered reader
BufferedReader br = new BufferedReader(reader);
// declaring empty string
String data =null;
// while loop to read data
// and printing them
while ((data = br.readLine()) != null)
{
System.out.println(data);
}
// closing the object
br.close();
}
}
輸出
prog.java:14: error: unreported exception FileNotFoundException; must be caught or declared to be thrown FileReader reader = new FileReader("file.txt"); ^ prog.java:25: error: unreported exception IOException; must be caught or declared to be thrown while ((data = br.readLine()) != null) ^ prog.java:31: error: unreported exception IOException; must be caught or declared to be thrown br.close(); ^ 3 errors
場景2:
如果給定的文件不可訪問,例如,如果它是隻讀的,那麽您可以讀取該文件,但不能修改該文件,如果我們嘗試修改它,則會發生錯誤,或者如果您嘗試訪問的文件讀/寫操作被另一個程序打開,則會出現此錯誤。
例子:
Java
// Java program to illustrate
// FileNotFoundException
// All output and input streams
// are available in java.io package
import java.io.*;
import java.util.*;
class Example2 {
public static void main(String[] args) {
// starting try block
try {
// Opening the file
File f=new File("file.txt");
// creating printWriter object
// by initiating fileWriter
PrintWriter p1=new PrintWriter(new FileWriter(f), true);
// printing sample text
p1.println("Hello world");
p1.close();
// changing the file operation
// to read-only
f.setReadOnly();
// trying to write to new file
PrintWriter p2=new PrintWriter(new FileWriter("file.txt"), true);
p2.println("Hello World");
}
// catching exception thrown
// by try block
catch(Exception ex) {
ex.printStackTrace();
}
}
}
輸出
java.security.AccessControlException: access denied ("java.io.FilePermission" "file.txt" "write") at java.base/java.security.AccessControlContext.checkPermission(AccessControlContext.java:472) at java.base/java.security.AccessController.checkPermission(AccessController.java:897) at java.base/java.lang.SecurityManager.checkPermission(SecurityManager.java:322) at java.base/java.lang.SecurityManager.checkWrite(SecurityManager.java:752) at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:225) at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:187) at java.base/java.io.FileWriter.<init>(FileWriter.java:96) at Example2.main(File.java:19)
處理異常:
如果我們知道是否會發生錯誤,首先我們必須使用try-catch塊。如果可能出現錯誤,嘗試塊內部的所有行都應該在那裏。還有其他補救措施可以處理異常:
- 如果異常消息表明不存在這樣的文件或目錄,則您重新驗證程序中是否提到了錯誤的文件名或該目錄中是否存在該文件。
- 如果異常消息告訴我們訪問被拒絕,那麽我們必須檢查文件的權限(讀、寫、讀和寫),並檢查該文件是否正在被另一個程序使用。
- 如果異常消息告訴我們指定的文件是一個目錄,那麽您必須刪除現有目錄(如果該目錄未使用)或更改文件名。
相關用法
- Java java.io.BufferedInputStream.mark()用法及代碼示例
- Java java.io.UnsupportedEncodingException用法及代碼示例
- Java java.lang.reflect.AccessibleObject.getAnnotation()用法及代碼示例
- Java java.lang.reflect.AccessibleObject.getAnnotations()用法及代碼示例
- Java java.lang.reflect.AccessibleObject.getDeclaredAnnotations()用法及代碼示例
- Java java.lang.reflect.AccessibleObject.isAccessible()用法及代碼示例
- Java java.lang.reflect.AccessibleObject.setAccessible()用法及代碼示例
- Java java.lang.reflect.Array.get()用法及代碼示例
- Java java.lang.reflect.Array.getBoolean()用法及代碼示例
- Java java.lang.reflect.Array.getByte()用法及代碼示例
- Java java.lang.reflect.Array.getChar()用法及代碼示例
- Java java.lang.reflect.Array.getDouble()用法及代碼示例
- Java java.lang.reflect.Array.getFloat()用法及代碼示例
- Java java.lang.reflect.Array.getInt()用法及代碼示例
- Java java.lang.reflect.Array.getLength()用法及代碼示例
- Java java.lang.reflect.Array.getLong()用法及代碼示例
- Java java.lang.reflect.Array.getShort()用法及代碼示例
- Java java.lang.reflect.Array.newInstance()用法及代碼示例
- Java java.lang.reflect.Array.set()用法及代碼示例
- Java java.lang.reflect.Array.setBoolean()用法及代碼示例
- Java java.lang.reflect.Array.setByte()用法及代碼示例
- Java java.lang.reflect.Array.setChar()用法及代碼示例
- Java java.lang.reflect.Array.setDouble()用法及代碼示例
- Java java.lang.reflect.Array.setFloat()用法及代碼示例
- Java java.lang.reflect.Array.setInt()用法及代碼示例
注:本文由純淨天空篩選整理自dadimadhav大神的英文原創作品 java.io.FileNotFoundException in Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。