如何使用扫描仪扫描txt文件并放入对象数组

时间:2015-12-06 20:57:08

标签: java arrays object

到目前为止我所写的内容与我目前对数组的了解有关,但我不确定如何创建对象数组。我的目标是读取一个文本文件,其中第一个标记为数组大小,后跟课程编号,部门和标题,然后将它们放入并使用扫描仪创建对象数组。当我编译我的代码时,它说fileScanner可能没有被初始化,所以我想知道什么是错误/我应该如何修复我的代码。任何帮助都会很受欢迎!

import java.util.Scanner;
import java.io.*;

public class Organizer{

public static void main(String[]args){
Scanner fileScanner;
String file;
File f = null;

    do{
        try{

            System.out.print("What is the name of the input file? ");
            Scanner inputReader = new Scanner(System.in);
            file =inputReader.nextLine();
            f = new File(file);
            fileScanner = new Scanner(new File(file));

        } catch (FileNotFoundException e) {

            System.out.println("Error scanning that file, please try again.");

        }
    } while (!f.exists());


    makeArray(fileScanner);

}

public static UniCourse[] makeArray(Scanner s){

        int arraySize = s.nextInt();
        System.out.println(arraySize);
        UniCourse[] myArray = new UniCourse[arraySize];
        String title = "";
        String dept = "";
        int num;

        while(s.hasNextLine()){
            String oneLine = s.nextLine();
            Scanner lineReader = new Scanner(oneLine);
            while (lineReader.hasNext()){
                dept = lineReader.next();
                num = lineReader.nextInt();
                while (lineReader.hasNext()){
                    title = title + lineReader.next();
                }

            }
            lineReader.close();
        }
        s.close();


        return myArray;

}

}

这是我正在使用的课程

public class UniCourse {

//INSTANCE VARIABLES
private String dept = "";
private int num = 0;
private String title = "";

//CONSTRUCTORS
public UniCourse(String dept, int num) {
    this.dept = dept;
    this.num = num; 
}

public UniCourse(String dept, int num, String title) {
    this.dept = dept;
    this.num = num; 
    this.title = title;
}

public UniCourse() {
    this.dept = "AAA";
    this.num = 100;
    this.title = "A course";    
}

//SETTER AND GETTER METHODS
public void setDept(String dept) {
    this.dept = dept;   
}

public void setNum(int num) {
    this.num = num;
}

public void setTitle(String title) {
    this.title = title;
}

public String getDept() {
    return this.dept;   
}

public int getNum() {
    return this.num;    
}

public String getTitle() {
    return this.title;  
}

//TOSTRING METHOD
public String toString() {
    return dept + " " + num + ": "+title;
}

}

4 个答案:

答案 0 :(得分:0)

将整个makeArray循环和try包裹在$ heroku buildpacks:set https://github.com/heroku/heroku-buildpack-multi.git块中。

编译器发出错误是因为您只在try块之外声明了扫描程序,但实际上是在try块内初始化它。我认为try块中发生的任何事情都被认为在编译期间不存在。

答案 1 :(得分:0)

错误恰好是编译器说的,当你在代码中引入fileScanner时,你还没有初始化它。

尝试:

Scanner fileScanner = null;

答案 2 :(得分:0)

您收到该警告是因为您初始化它的行

 fileScanner = new Scanner(new File(file));
可能无法访问

,因为可能会抛出FileNotFoundException。您捕获该异常并继续执行,以到达

makeArray(fileScanner);

您尝试使用它的位置。因此警告!

答案 3 :(得分:0)

编译器抛出错误是因为您正在try块中初始化扫描程序,这不能保证完成,并且可能会捕获异常并在任何时间点发生异常。

因此,您必须在try块之前初始化扫描程序或在try块内添加扫描程序的使用,这样如果在启动扫描程序之前发现错误,则最终不会使用未初始化的宾语。

我建议将make数组方法包装在try块中,正如Joel建议的那样,因为如果文件不存在,你仍无法生成数组。