Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
了解Java的try/catch_Java - Fatal编程技术网

了解Java的try/catch

了解Java的try/catch,java,Java,我目前正在为学校编写一个应用程序,它是一个迷你搜索引擎。在执行时,它对作为参数包含的文本文件的内容进行索引。我以前没有使用过try和catch方法,我们只是将此代码作为包含在我们的程序中: Scanner inputFile = null; try { inputFile = new Scanner(new File("dog.txt")); } catch (FileNotFoundException fe) { System.out.println("File not fou

我目前正在为学校编写一个应用程序,它是一个迷你搜索引擎。在执行时,它对作为参数包含的文本文件的内容进行索引。我以前没有使用过
try
catch
方法,我们只是将此代码作为包含在我们的程序中:

Scanner inputFile = null;
try {
    inputFile = new Scanner(new File("dog.txt"));
} catch (FileNotFoundException fe) {
    System.out.println("File not found!");
}
我创建了一个方法,该方法循环遍历参数,并为找到的每个唯一单词向数组中添加一个新对象。问题是每当我运行应用程序时,
catch
方法似乎仍在执行,我不知道为什么。这是输出:

正在索引dog.txt。。。找不到文件
正在索引cat.txt。。。找不到文件

我已经包括了下面的方法。如果有人能指出我错在哪里,那就太好了

static void createIndex(String[] args) {
    for(int i = 0; i < args.length; i++) {
        Scanner inputFile = null;
        try {
            System.out.print((args[i]) + " being indexed ... ");
            inputFile = new Scanner(new File(args[i])); 
            while(inputFile.hasNext()) {
                boolean isUnique = true;
                String newWord = inputFile.next().trim().toLowerCase();
                for(int j = 0; j < uniqueWords; j++)
                    if(newWord.equals(wordObjects[j].getWord())) {
                        wordObjects[j].setFile(args[i]);
                        isUnique = false;
                    }

                if(isUnique) {
                    wordObjects[uniqueWords] = new WordIndex(newWord, args[i]);
                    uniqueWords++;
                }
            }

            System.out.print("done");

        } catch(FileNotFoundException fe) {
            System.out.println("File not found!");
        }
    }
}
静态void createIndex(字符串[]args){
对于(int i=0;i
如果更换线路:

System.out.println("File not found!");
以下几行:

System.out.println("File not found! " + fe);
fe.printStackTrace();
它应该准确地告诉您异常是什么(以及发生异常的行号)

下一步是在
扫描器
构造函数中使用完整路径名(例如,
“/tmp/dog.txt”
)。可能是您的IDE从一个不同于您所认为的目录运行代码

您可以确定您所处的实际目录:

File here = new File (".");
try {
   System.out.println ("Current directory: " + here.getCanonicalPath());
} catch(Exception e) {
    e.printStackTrace();
}

如果更换该行:

System.out.println("File not found!");
以下几行:

System.out.println("File not found! " + fe);
fe.printStackTrace();
它应该准确地告诉您异常是什么(以及发生异常的行号)

下一步是在
扫描器
构造函数中使用完整路径名(例如,
“/tmp/dog.txt”
)。可能是您的IDE从一个不同于您所认为的目录运行代码

您可以确定您所处的实际目录:

File here = new File (".");
try {
   System.out.println ("Current directory: " + here.getCanonicalPath());
} catch(Exception e) {
    e.printStackTrace();
}

检查以确保文件位于正确的路径中(如果您使用的是eclipse,请在执行之前将运行路径设置为文件的目录)

否则,请使用文件的完整路径名,并查看是否仍存在此错误

如果你移动了线

    System.out.print((args[i]) + " being indexed ... ");
排队

    inputFile = new Scanner(new File(args[i])); 

我几乎可以肯定,“正在编制索引的文件…”不会打印检查以确保文件位于正确的路径中(如果使用eclipse,请在执行之前将运行路径设置为文件的目录)

否则,请使用文件的完整路径名,并查看是否仍存在此错误

如果你移动了线

    System.out.print((args[i]) + " being indexed ... ");
排队

    inputFile = new Scanner(new File(args[i])); 

我几乎可以肯定,“正在编制索引的文件…”不会打印

我要做的第一件事是切换这两行,这样只有在实际找到该文件时,您才会收到消息:

        System.out.print((args[i]) + " being indexed ... ");
        inputFile = new Scanner(new File(args[i])); 
基本上,将它们放在如下位置:

        inputFile = new Scanner(new File(args[i])); 
        System.out.print((args[i]) + " being indexed ... ");
这样就不那么容易误导我了

除此之外,代码在我看来还行,但我们遗漏了Scanner的代码——我刚刚检查过,并且根据Java文档(至少对于1.4.2),文件构造函数不会抛出FileNotFoundException,因此必须执行其他操作。是时候让调试器出来并找出引发异常的确切位置,或者至少获取一个堆栈跟踪,显示引发异常的位置了


此外,如果程序的工作目录不在文件所在的位置,您可能必须限定要加载的文件的路径;从您的输出来看,您似乎没有传递任何路径,您可能必须这样做。

我要做的第一件事是切换这两行,这样您只会在文件实际已加载时收到消息nd:

        System.out.print((args[i]) + " being indexed ... ");
        inputFile = new Scanner(new File(args[i])); 
基本上,将它们放在如下位置:

        inputFile = new Scanner(new File(args[i])); 
        System.out.print((args[i]) + " being indexed ... ");
这样就不那么容易误导我了

除此之外,代码在我看来还行,但我们遗漏了Scanner的代码——我刚刚检查过,并且根据Java文档(至少对于1.4.2),文件构造函数不会抛出FileNotFoundException,因此必须执行其他操作。是时候让调试器出来并找出引发异常的确切位置,或者至少获取一个堆栈跟踪,显示引发异常的位置了


此外,如果程序的工作目录不在文件所在的位置,您可能必须限定要加载的文件的路径;从您的输出来看,您似乎没有传递任何路径,您可能必须这样做。

感谢pax,我发现我意识到文件位于错误的目录中,以及大家指出的两行b以错误的顺序私奔。感谢您提供额外的错误检查代码。肯定会派上用场的。感谢pax,我发现我的文件位于错误的目录中,以及大家在下面指出的两行错误的顺序。感谢您提供额外的错误检查代码。肯定会派上用场的。例外告诉你找不到文件。那么你知道那些
.txt
文件在哪里吗?你能在当前目录中看到它们吗?谢谢大家。我想是因为它正在打印找到它们的文件的名称…显然是从我写的参数中得到的。所以移动了文件并交换了两行f代码,你们都指出了,效果很好!我建议将try块包装为