将文本文件导入数组以创建对象

时间:2015-12-17 03:38:22

标签: java arrays input text-files java-io

我正在尝试使用文本文件将各种参数输入到数组中,然后使用该数组创建对象。文本文件中的每个留置权都有每个对象用逗号分隔的字符串和单个对象的单独行。

我似乎无法弄清楚我做错了什么,当我尝试调用加载文件的方法时,我一直收到此错误: “线程中的异常”主“java.io.FileNotFoundException:studentData.txt(系统找不到指定的文件)”

这是我的方法:

    public void loadStudent() throws FileNotFoundException{

    File inputFile = new File("studentData.txt");
    Scanner input = new Scanner(inputFile);
    try{
    while(input.hasNext()){
        String info = input.nextLine();
        String elements[] = info.split(" , ");
        String fName = elements[0];
        String lName = elements[1];
        String phone = elements[2];
        String address = elements[3];
        double gpa = Double.parseDouble(elements[4]);
        String major = elements[5];
        Student student = new Student(fName, lName, phone, address, 
                                          gpa, major);
        addStudent(student);
        input.nextLine();
        count++;
    }
    input.close();

    }catch(FileNotFoundException e){
        e.printStackTrace();
    }
}

2 个答案:

答案 0 :(得分:1)

好的,你有两个选择......

选项#01 ......

通过将文件放在src目录中,可以将文件包含在项目本身中。这会将文件嵌入您的程序中,使其成为只读

Project Structure

(是的,我知道我使用的是Netbeans,Eclipse中的概念是相同的)

正如您所看到的,studentData.txt位于我的myawesomeproject课程的Main旁边。你的src放置的地方确实很重要,所以要注意,如果文件不在同一个包中,那么你需要提供一个相对或完全限定的路径。

接下来,我们使用Scanner input = new Scanner(getClass().getResourceAsStream("studentData.txt"))打开文件,例如......

package myawesomeproject;

import java.io.FileNotFoundException;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        new Main();
    }

    public Main() {
        try {
            loadStudent();
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        }
    }

    public void loadStudent() throws FileNotFoundException {
        try (Scanner input = new Scanner(getClass().getResourceAsStream("studentData.txt"))) {
            while (input.hasNext()) {
                String info = input.nextLine();
                System.out.println(info);
                String elements[] = info.split(" , ");
                String fName = elements[0];
                String lName = elements[1];
                String phone = elements[2];
                String address = elements[3];
                double gpa = Double.parseDouble(elements[4]);
                String major = elements[5];

            }
        }
    }
}

在我的例子中,打印......

B1 , B2 , B3 , B4 , 0 , B6

(这是我文件的内容)

选项#02 ......

您将文件放在“working”目录中,这是执行程序的上下文,通常,这是项目目录(包含src目录的目录)

enter image description here

然后您可以使用Scanner input = new Scanner(new File("studentData.txt"))打开它,例如......

package myawesomeproject;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        new Main();
    }

    public Main() {
        try {
            loadStudent();
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        }
    }

    public void loadStudent() throws FileNotFoundException {
        try (Scanner input = new Scanner(new File("studentData.txt"))) {
            while (input.hasNext()) {
                String info = input.nextLine();
                System.out.println(info);
                String elements[] = info.split(" , ");
                String fName = elements[0];
                String lName = elements[1];
                String phone = elements[2];
                String address = elements[3];
                double gpa = Double.parseDouble(elements[4]);
                String major = elements[5];

            }
        }
    }
}

其中输出与上面相同的内容,因为我使用了相同的文件,只是将其移动到示例

这假设您没有更改“工作”目录。如果您可以使用System.out.println(System.getProperty("user.dir"));测试工作目录的位置,则可以将文件移动到此位置

答案 1 :(得分:0)

您将获得的FileNotFoundException指示名称的含义:JVM无法在该位置找到该文件。由于您指定的路径是相对的(非绝对路径),因此可能不是您认为的路径(相对于您所在的工作目录)。要解决这个问题,您可以: a)将文件路径更新为相对于运行应用程序的位置或更正 b)指定输入文件的绝对路径