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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。