使用 FileInputStream 的有效文件的 FileNotFoundException

FileNotFoundException for a valid file using FileInputStream

当我写 FileInputStream 时,虽然我有有效的文件,但它会抛出 FileNotFoundException。 我用过这个:

package io;
import java.io.*;
public class implementIo {
    public static int i;
    public static FileOutputStream output;
    public static FileInputStream input;
    public static void main(String args[]) {
    try {
                output = new FileOutputStream("writeModification.txt");
            input = new FileInputStream("modification.txt");
            do {
        i = input.read();
        if(i != -1) output.write(i);
        }while(i != -1);
    } catch (Exception e) {
        System.out.println("Exception caught " + e);
    } finally {
        try {
            if(output == null) input.close();
        }catch(IOException e) {
            System.out.println("IOException caught: " + e);
        }
    }
}

}

虽然我在同一个包文件夹中有两个单独的文件,分别名为 "modification.txt""printModification.txt",然而系统抛出一个FileNotFoundException。请帮忙!

这是因为 FileInputStream 不像 new FileOutputStream() 那样在初始化期间提供文件创建。所以如果已经说了这些,我们可以看到一件有趣的事情要记住:每次初始化 FileOutputStream 时都会创建 modification.txt (并且不会被覆盖),这就是为什么您的代码很可能在 new FileInputStream() 行中断的原因。

你如何处理你的异常? 您可以在执行代码之前创建文件(手动使用 New -> Text Document 等)或修改代码并使用 File class :

File file = new File("modification.txt");
    try {
        file.createNewFile();
        input = new FileInputStream(file);
        //your code here - output etc.

即使您在同一个包文件夹中创建了文件,您的代码仍然无法正常工作?这是因为您的流查找文件的默认路径是当前工作目录。这是一个例子:

myproject
   |___src
   |    |___main
   |          |___java
   |                |___io
   |                     |___implementIo
   |___writeModification.txt
   |___modification.txt

如果您想像以前一样使用流(在流构造函数参数中只使用一个简单的文件名),那么这是正确的结构。但是如果你的文件不在那里,你必须指定绝对路径。这是一个例子:

 myproject
   |___src
        |___main
              |___java
                    |___io
                         |___implementIo
                         |___writeModification.txt
                         |___modification.txt

访问文件的正确方法是:

FileInputStream input = new FileInputStream("C://myproject//src//main//java//io//modification.txt");

输出流也一样。 (请用正确的文件位置修改路径)