我正在尝试让我的程序从文本文件中读取数据并将其存储在数组中。文本文件包含有关行星的数据。 这是一个例子:
Mercury
4.151002e10
2.642029e10
-1.714167e9
-3.518882e4
4.355473e4
6.785804e3
3.302e23
我的文件名为test.txt。它与我的class.java文件位于同一目录中。我已经使用System.out.println(new File("test.txt").getAbsolutePath());
来检查目录路径是否正确,它是什么,我使用System.out.println(new File("."));
来检查它是否在代码尝试编译的同一目录中,这又是它是(输出一个点,我被引导相信意味着它在正确的目录中)。我已经尝试了不同的方法来查找文件,例如将其重命名为其他内容以检查它不是关键字,将文件的编码更改为Unicode,或UTF-8或ANSI,其中没有一个工作,使用文件中的.\test
查找同一目录,其中没有一个工作。
这是我的代码:
public static void defaultPlanetArray(){
Planet[] solarSystem;
solarSystem = new Planet[9];
PhysicsVector dummyAcceleration = new PhysicsVector();
System.out.println(new File("test.txt").getAbsolutePath());
System.out.println(new File("."));
try{
File file = new File("C:\\Users\\Lizi\\Documents\\Uni Work\\Year 2\\PHYS281\\Project\\test.txt");
Scanner scnr = new Scanner(file);
}
catch(FileNotFoundException e){
System.out.println("File not found!");
}
int i = 0;
while(i<9 && scnr.hasNextLine()){
//read values from file and set as Planet object, then set to array.
i++
}
PhysicsVector和Planet都是我创建的类。 PhysicsVector和Planet的其余部分除了这个摘录编译没有任何问题。当我尝试编译这段特定代码时,我得到:
.\Planet.java:65: error: cannot find symbol
while(i<9 && scnr.hasNextLine()){
^
我猜这意味着变量scnr没有在try部分创建,因为它无法找到该文件。我认为这是因为当我不包含try和catch块时,我得到:
.\Planet.java:59: error: unreported exception FileNotFoundException; must be caught or declared to be thrown
Scanner scnr = new Scanner(file);
^
当我第一次创建方法时,我也尝试了catches FileNotFoundException
,但这给我带来了与上面相同的错误。
我可以在程序中设置值,但这会产生很多不必要的代码,而且我认为效率相当低。
所以我的问题是,如何让扫描程序从文件中读取我的值?
答案 0 :(得分:0)
由于@Lalit Verma指出您定义的scnr
变量存在于try-catch块中。
将代码更改为:
try{
File file = new File("C:\\Users\\Lizi\\Documents\\Uni Work\\Year 2\\PHYS281\\Project\\test.txt");
Scanner scnr = new Scanner(file);
int i = 0;
while(i<9 && scnr.hasNextLine()){
//read values from file and set as Planet object, then set to array.
i++
}
}catch(FileNotFoundException e){
System.out.println("File not found!");
}