为什么我的扫描仪没有从我的文件中读取?

时间:2017-12-06 15:48:32

标签: java java.util.scanner

我正在尝试让我的程序从文本文件中读取数据并将其存储在数组中。文本文件包含有关行星的数据。 这是一个例子:

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,但这给我带来了与上面相同的错误。

我可以在程序中设置值,但这会产生很多不必要的代码,而且我认为效率相当低。

所以我的问题是,如何让扫描程序从文件中读取我的值?

1 个答案:

答案 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!");
  }