我试图在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)
答案 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")