2015-11-02 133 views
0

如果我把文件放在某个地方,然后输入完整的文件位置,它可以正常工作,但我不希望它是那种方式。我只想让我的data.txt从当前目录中读取。Java File Scanner,找不到文本文件

错误是:java.io.FileNotFoundException:data.txt中(该系统找不到指定的文件)

我使用Eclipse,我试图把data.txt中的根文件夹中的项目,src和bin文件夹,没有任何作用。即使尝试从头开始创建文件作为Eclipse项目的一部分。仍然不会读为data.txt。这必须是我犯的一个愚蠢的错误,因为它可以在完整文件位置输入的情况下工作,但是这会杀死任何可移植性。

下面是代码的摘录。

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 

//... more code 

    Scanner fileScanner=null; 
    double salary; 
    double commission; 
    double sales; 
    double stock; 


    try 
    { 

     fileScanner=new Scanner(new File("data.txt")); 

     while(fileScanner.hasNextLine()) 
     { 

      int year=fileScanner.nextInt(); 
      String type=fileScanner.next(); 

我试图避免发布所有的代码,因为它很长,但如果需要的话,请问,我会更新。

谢谢!

+0

打印'System.getProperty(” user.dir“);'并查看目录是否是文件所在的目录。如果没有,请使用'getAbsolutePath()' – sam

+0

@sam好吧,那样做了。真的很奇怪,不知何故我的driver.java文件正在从一个完全不同的项目工作。这怎么发生?某种设置?或者只是我的用户错误? – bnr32jason

+0

检查[这里](http://stackoverflow.com/questions/1099300/whats-the-difference-between-getpath-getabsolutepath-and-getcanonicalpath)。它包含许多答案,可以以比我能在评论中回答更详细的方式回答你的问题。 – sam

回答

1

试着做这样的事情,这个代码将添加当前工作目录到您的路径,

import java.net.*; 
import java.io.*; 
import java.util.Scanner; 

public class Test { 

    public static void main(String... args) throws Exception { 
     URL location = Test.class.getProtectionDomain().getCodeSource().getLocation(); 
     System.out.println(location.getFile()); 
     Scanner fileScanner = new Scanner(new File(location.getFile() + "data.txt")); 
     while (fileScanner.hasNextLine()) { 
      System.out.println(fileScanner.nextLine()); 
     } 
    } 
} 
+0

就是这样,另一位用户在上面评论,我检查了工作目录,一些我的Java文件必须从一个完全不同的项目打开。谢谢! – bnr32jason

0

你的项目结构应该是这样的:

ProjectRoot 
|-> src/ 
|-> bin/ 
|-> data.txt 
+0

看起来这样。这就是为什么我很困惑。我以前使用文件扫描仪没有问题。 – bnr32jason