2012-01-29 179 views
3

我是新来的编程世界,我试图做一个简单的程序,我从文件中读取和输出单个数字。我相信我在代码中正确设置了所有东西,我是否需要对.txt文件的位置做任何特殊的操作以使程序读取文件?Java Eclipse错误'找不到源'。

package pack; 

import java.util.*; 

import java.io.*; 

public class Ch2_PrExercise17 { 

    public static void main(String[] args) 
      throws FileNotFoundException{ 

     Scanner inFile = new Scanner(new FileReader("inData.txt")); 
     int num1; 
     num1 = inFile.nextInt(); 
     System.out.println(num1); 
    } 
} 

我得到的例外情况如下;

Exception in thread "main" java.io.FileNotFoundException: inData.txt (The system cannot find the file specified) 
    at java.io.FileInputStream.open(Native Method) 
    at java.io.FileInputStream.<init>(Unknown Source) 
    at java.io.FileInputStream.<init>(Unknown Source) 
    at java.io.FileReader.<init>(Unknown Source) 
    at pack.Ch2_PrExercise17.main(Ch2_PrExercise17.java:8) 
+0

它需要与您的类文件'Ch2_PrExercise17' – 2012-01-29 02:51:32

+2

在同一个目录中如果“找不到源”是整个错误消息,那么您需要检查构建路径。右键单击您的项目(左侧),选择“configure build path”项目,并确保您的实际源文件(CH2_PrExercise17.java)位于源目录中。 – bdares 2012-01-29 02:51:33

+0

此外,请确保将日志记录级别升高到可以从FileReader中看到DEBUG语句的位置。 FileReader很有可能会告诉你它*认为文件所在的位置,这将帮助你重新定位文件或调整文件路径。 :) – jmort253 2012-01-29 02:54:06

回答

2

如果Eclipse真的说“源找不到”,那么它正在谈论(在这一点上)关于某些东西的源代码。

如果您正在管理从Eclipse运行该类,那么Eclipse已经能够编译它,因此它知道源代码的位置。所以它必须是别的东西的源代码。我最好的猜测是它找不到标准Java类库的源代码,这可能意味着Eclipse运行在JRE安装而不是JDK安装上。

(如果我的理论是正确的,那么“源未找到”的文字被嵌入在异常堆栈跟踪...)

它也可能是一个积累的问题,但我对此表示怀疑,因为如果类WASN当你在eclipse中查看源文件时,你会看到错误标记,当你试图运行它时,Eclipse会发出抱怨。如果源文件位于错误的目录中,Eclipse也会投诉。


问题的第二部分是让您的应用程序找到"inData.txt"文件。这应该很简单。当您尝试使用相对路径名打开文件时,Java库将尝试解析相对于应用程序“当前目录”的路径名。默认情况下,当您从Eclipse运行应用程序时,这将是您启动Eclipse时shell的目录;例如

$ cd /home/josh/somedir 
$ eclipse & 

...并且默认当前目录应该是“/ home/josh/somedir”。

如果默认当前目录是不对的,你有多种选择,包括:

  • 更改目录推出的Eclipse之前是正确的。
  • 使用Eclipse的“运行配置”面板来选择应用程序的启动配置,并更改启动器的当前目录设置。
  • 将源代码中的相对路径名更改为该文件的正确绝对路径名。

的后续

Exception in thread "main" java.io.FileNotFoundException: inData.txt (The system cannot find the file specified) 
    at java.io.FileInputStream.open(Native Method) 
    at java.io.FileInputStream.<init>(Unknown Source) 
    at java.io.FileInputStream.<init>(Unknown Source) 
    at java.io.FileReader.<init>(Unknown Source) 
    at pack.Ch2_PrExercise17.main(Ch2_PrExercise17.java:8) 

“未知源”的消息意味着JVM(不蚀)无法找到它需要产生一个完整的堆栈跟踪信息。您看起来正在使用剥离了调试信息的“rt.jar”文件执行。你可以忽略这个问题,但为了解决这个问题,你需要看看JVM正在使用什么,以及为什么“rt.jar”没有调试信息。

真正的问题是FileNotFoundException例外,我的诊断(如上所述)。 “当前目录”不是它需要用来解析相对路径名的。参见上面的可能解决方案。