0

我正在尝试在 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)

4

3 回答 3

3

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

    InputStream is = getClass().getClassLoader().getResourceAsStream("phone.txt");
    Scanner fileScanner = new Scanner(is);
于 2012-12-04T20:24:46.823 回答
1
new File("phone.txt")

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

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

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

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

于 2012-12-04T20:22:32.483 回答
0

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

但是如果你想把文件放在同一个包中,你总是可以做类似的事情(假设你只有一个包):

new File("./src/myPackage/myFile.txt")
于 2012-12-04T20:28:28.157 回答