如何扫描同一个包中的txt?

时间:2012-12-04 20:17:36

标签: java java.util.scanner filenotfoundexception

我试图在txt上使用Java.util.scanner来解析它。我无法尝试扫描文件,因为找不到该文件。

我的类在txt文件的同一个包中。那么请你告诉我如何在同一个类的包中扫描文件。

public class PhoneBook {
  private ArrayList<PhoneBookEntry>[] buckets;
  public void load() {
    try {
      Scanner scan = new Scanner(new File("phone.txt"));
    } catch (FileNotFoundException e) {
      System.out.println("File Not Found"); 
    } 
  } 
  public static void main(String[]args) {
    PhoneBook phone = new PhoneBook(); 
    phone.load(); 
  } 
} 

这是错误的StackTrace

java.io.FileNotFoundException: phone.txt (The system cannot find the file specified) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(Unknown Source) at java.util.Scanner.<init>(Unknown Source) at HashSet.PhoneBook.load(PhoneBook.java:13) at HashSet.PhoneBook.main(PhoneBook.java:23)

3 个答案:

答案 0 :(得分:3)

将文件放在类路径的根目录中(编译后,您的文件应出现在生成.class文件的根文件夹中)并使用以下代码语法:

    InputStream is = getClass().getClassLoader().getResourceAsStream("phone.txt");
    Scanner fileScanner = new Scanner(is);

答案 1 :(得分:1)

new File("phone.txt")

在当前工作目录中查找该文件。这是启动java虚拟机的目录。

你说它与该类位于同一个包中,这很可能是一个不同的目录(例如src/com/mypackage)。

尝试将文件移动到项目的根目录。然后你应该能够加载它。

@Yogendra的答案中显示了一种不同的方法,当文件与.class文件位于同一个包二进制目录中时,该方法也可以使用。但我不确定您是否要将此类文件作为资源加载。

答案 2 :(得分:0)

如其中一条评论所述,您需要将文件放在生成.jar的位置。如果您从Netbeans / Eclipse运行,那么这将是项目的根文件夹,如果您从已编译的.jar运行,它将与.jar位于同一目录中。包只是用于组织和分离源文件的文件夹。

但是如果你想让文件在同一个包中,你可以总是这样做(假设你只有一个包):

new File("./src/myPackage/myFile.txt")