怎么了?为什么它会给我未报告的异常java.io.FileNotFoundException?

怎么了?为什么它会给我未报告的异常java.io.FileNotFoundException?,java,Java,怎么了?为什么它会给我“未报告的异常java.io.FileNotFoundException”?这是我正在学习的一本书的练习,我只是不知道哪里错了,它看起来和他们提供的例子一模一样。此文件位于同一文件夹中 import java.io.*; import java.util.*; public class Mine { public static void main(String[] args) { Scanner inFile = new S

怎么了?为什么它会给我“未报告的异常java.io.FileNotFoundException”?这是我正在学习的一本书的练习,我只是不知道哪里错了,它看起来和他们提供的例子一模一样。此文件位于同一文件夹中

import java.io.*;
import java.util.*;
public class Mine
{
    public static void main(String[] args)
    {
      Scanner inFile = 
          new Scanner(new FileReader("Ch3_Ex7Data.txt"));
      PrintWriter outFile = new PrintWriter("Ch3_Ex7Output.dat");

      String lastName;
      lastName = inFile.next();
      System.out.println(lastName);
      inFile.close();
      outFile.close();
    }
}

FileNotFoundException
意味着。。。那么文件就找不到了

确保
“Ch3_Ex7Data.txt”
文件是项目根目录的直接子目录。读取一个文件时,当您仅使用此(“Ch3_Ex7Data.txt”)相对路径时,IDE将首先在其中进行搜索

ProjectRoot
         Ch3_Ex7Data.txt
         src
注意:在将来,当文件不能成为嵌入式资源时,您将了解到这不是用于生产/部署目的的最佳解决方案,但在您深入研究生产阶段之前,上述方法应该对您有效


更新操作评论

“我现在应该养成另一种方法的习惯吗?如果是,那会是什么样子?”

将来您可能想学习它,但首先需要学习
InputStreams
。因此,这可能是一个错误,但为时过早。但如果您不想了解更多,只需搜索“从jar读取文本文件”。你会找到这样的答案

InputStream is = getClass().getResourceAsStream("Ch3_Ex7Data.txt");
文件现在必须位于类路径中,因此文件结构将从上面的结构更改为下面的结构


FileNotFoundException是选中的异常。你得试试看。文件是否存在并不重要。FileNotFoundException扩展了IOException,所以您只需要捕获IOException。这应包括:

import java.io.*;
import java.util.*;
public class Mine
{
    public static void main(String[] args)
    {
        Scanner inFile = null;
        PrintWriter outFile = null;
        try {
            try {
                inFile = new Scanner(new FileReader("Ch3_Ex7Data.txt"));
                outFile = new PrintWriter("Ch3_Ex7Output.dat");

                String lastName;
                lastName = inFile.next();
                System.out.println(lastName);
            } finally {
                if(inFile != null)
                    inFile.close();
                if(outFile != null)
                    outFile.close();
            }
        } catch(IOException ioe) {
            ioe.printStackTrace();
        }
    }
}

和什么在同一个文件夹中?它找不到您试图读取的文件。文件与编译的类文件的关系在哪里?更重要的是,在执行程序时,文件与当前目录的关系在哪里?文件与编译的类文件位于同一位置,因此我认为我不需要添加路径。我应该在哪里添加代码。我现在应该养成另一种方法的习惯吗?如果是这样,那会是什么样子?谢谢所有文件都在同一文件夹中是的,但是相对于项目根目录,它们在哪里?这才是最重要的。看我刚才添加的图片这里是你的
src
?位于
Excr7
中。
Excr7
是实际的项目文件夹还是一个包?我不确定try的概念是什么,我还没有学会,但它起了作用。非常感谢你!基本上,如果找不到文件,构造函数将抛出此异常。try/catch意味着控制流将跳出并跳转到catch块。(顺便说一句,我用try…finally…close展示的东西不是完全必要的,但这是一个最佳实践。Java 7+还必须替换这个习惯用法。)在运行时可能会抛出异常,在这种情况下@peeskillet建议的可能会有所帮助。相对目录很挑剔。
import java.io.*;
import java.util.*;
public class Mine
{
    public static void main(String[] args)
    {
        Scanner inFile = null;
        PrintWriter outFile = null;
        try {
            try {
                inFile = new Scanner(new FileReader("Ch3_Ex7Data.txt"));
                outFile = new PrintWriter("Ch3_Ex7Output.dat");

                String lastName;
                lastName = inFile.next();
                System.out.println(lastName);
            } finally {
                if(inFile != null)
                    inFile.close();
                if(outFile != null)
                    outFile.close();
            }
        } catch(IOException ioe) {
            ioe.printStackTrace();
        }
    }
}