2014-01-16 16 views
-1

这是我的代码:显示文件内容与扫描器类

public static void main(String[] args) { 
    try { 
     Scanner in = new Scanner(new File("f.txt")); 
     System.out.println("Next Double is: "); 
     System.out.println(in.nextDouble()); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

而我的“f.txt”在我的类路径中,我看到它在左边的列我的NetBeans(即显示类路径的类文件)。

但是这段代码抛出的文件没有找到异常。

为什么?

我“f.txt”文件:

sdsdsdssf5s1d2s1 d5s s 
s dlsfsf1s2 s1fsd1sd 
sf31s3ds3ds 
dgrh2t4jg6ng52.2 . 32 56. 2df5d5fd 
sds2.3 2. 2 . 265.6 . 5 . 3 2 .f3sdsd 
+2

如果你这样做,'文件f =新的文件(“f.txt”),会发生什么;'然后'系统.out.println(f.getCanonicalPath());'? –

+0

@HovercraftFullOfEels其结果是:'C:\ Users \ khoy \ Desktop \ NetBeans Projects \ MyProject \ f.txt'。 – Sajad

+0

这是否匹配f.txt文件的真正的绝对路径? –

回答

0

这是一个在Java初学者中的常见问题。

首先理解这个理论: 如果你有一个包com.example,通过常识你会把文件放在那里NOO! 您必须将文件放在所有文件夹的根目录下(com文件夹之前的文件夹)。

所以你必须把f.txt放在MyProject文件夹中,一切都会好的。

关于不匹配异常,请尽量不要使用nextDouble()这样的不安全方法。会发生什么是读者正试图将前4个字节作为双精度(“sd”字符串)进行投射,并且显然会抛出异常。尝试逐行阅读或逐字阅读,并从数组列表中做一个简单的字符数组。

0

您也可以考虑使用类加载器使用getClass().getResourceAsStream("f.txt");作为资源内的资源读取文件。这是访问资源的首选方式,因为您不必再​​担心绝对路径和相对路径。如果某个资源位于您的类路径中,则可以访问它。

这是推荐使用的ClassLoader通过Thread.currentThread().getContextClassLoader()返回的,如果应用程序使用多个类加载