将文件中的数据读入Java数组

时间:2014-05-18 00:51:20

标签: java arrays arraylist

在我的程序中,我要求用户输入主题名称和主题代码,我将其传递给subjects.txt文件,例如:

在TestSubject类中 -

//ask the user to input a subject name
System.out.println("Please enter a Subject Name");
//assign each input to a side
String subjectName = input.nextLine();

//ask the user to input a subject code
System.out.println("Please enter a Subject Code");
String subjectCode = input.nextLine();

//add records to the file
subject.addRecords(subjectName, subjectCode);

在主题课程内 -

//add the records of valid subject name and subject code    
public void addRecords(String name, String code) {
    try(PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("subjects.txt", true)))) {
        out.printf(name);
        out.printf("\n");
        out.printf(code);
        out.printf("\n");
        out.close();
    }catch (IOException e) {

    }
}

然后,我想要读取此文件并将数据传递给arraylist。该文件可能类似于:

Testing 1
ABC123
Testing 2
DEF456
Testing3
GHI789

我想将它传递给一个arraylist然后我可以处理针对这个数组的其他方法,例如排序,看看是否有相同的等等。

//read data from subjects file and place in an array
public void readData(){
    Scanner input = new Scanner("subjects.txt");
    while (input.hasNext()) {
        String subjectName = input.nextLine();
        String subjectCode = input.nextLine();
    }

    ArrayList<String> subjectNames = new ArrayList<String>();
    ArrayList<String> subjectCodes = new ArrayList<String>();

    //add the input to the arrays

    subjectNames.add(subjectName);
    subjectNames.add(subjectCode);

    //display the contents of the array

    System.out.println(subjectNames.toString());
    System.out.println(subjectCodes.toString());
}

即使有一个很好的教程,我也可能指向正确的方向......

2 个答案:

答案 0 :(得分:1)

感谢您修改帖子。当我能看到导致问题的原因时,更容易提供帮助。

您每两行检查一次hasNext()。应检查每一行,因为您不应该信任该文本文件是您所期望的,并且应该在它不是时显示信息性错误消息。

你还要在循环范围内声明字符串,所以循环之外的任何东西都不知道它们是什么。将subjectCode推入subjectNames集合可能不是你想要的。实际上,每个nextline()都是踩到最后一个字符串值。这意味着您将忘记在循环的先前迭代中完成的所有工作。

collections.add()调用,而不是字符串,应该在循环中。确保在循环之前声明集合并将它们的添加调用放在循环中。看看你是否得到了有用的结果。

给&#34; Reading a plain text file in Java&#34;阅读。

答案 1 :(得分:0)

关于您的教程查询,我经常在this站点上找到一些很好的基本示例,包括一个用于从链接中引用的文件中读取的示例。在这里使用该示例的主要原则是您可以尝试从文件中读取行的一种方法:

public static void main(String[] args){

ArrayList<String> subjectNames = new ArrayList<String>();
     ArrayList<String> subjectCodes = new ArrayList<String>();

    //Path leading to the text file
    Path data = Paths.get(System.getProperty("user.home"), "Desktop", "file.txt");

    int count = 0;//Will indicate which list to add the current line to

    //Create a buffered reader to read in the lines of the file
    try(BufferedReader reader  = new BufferedReader(new FileReader(data.toFile()))){
        String line = "";
        while((line = reader.readLine()) != null){//This statement reads each line until null indicating end of file
            count++;//Increment number changing from odd to even or vice versa
            if(count % 2 == 0){//If number is even then add to subject codes
                subjectCodes.add(line);
            } else {//Otherwise add to subject names
                subjectNames.add(line);
            }
        }
    } catch (IOException io){
        System.out.println("IO Error: " + io.getMessage());
    }

    System.out.println("Codes: ");
    display(subjectCodes);
    System.out.println("\nNames: ");
    display(subjectNames);


}


private static void display(Collection<String> c){
    for(String s :c){
        System.out.println(s);
}

希望它有所帮助!