当前位置: 首页 > 知识库问答 >
问题:

从文件读取-Java

鲁乐
2023-03-14

我正在做一个项目,我需要从文件中读取文本,然后将特定部分存储为变量。

假设我有文本文件示例。txt

John
Smith
32
1991

我想将第一行指定为:

String firstName; -> John

等等

到目前为止,我有这个。

public void load(String fileName){
   BufferedReader br = null;

    try {

        String sCurrentLine;

        br = new BufferedReader(new FileReader(fileName));

        while ((sCurrentLine = br.readLine()) != null) {
            System.out.println(sCurrentLine);
        }

    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (br != null)br.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}

这段代码将打印文件的内容,这是朝着正确方向迈出的一步,但是如何读取每行内容呢?

因为我真的不想养成在内存中存储整个文件的习惯。

我知道你可以用

parseInt()

和类似的方法,但我只是想了解提取值的方法。

共有2个答案

张财
2023-03-14

你也可以试试这个。

   File file = new File("your file location");
    Scanner scan = new Scanner(file);
    while(scan.hasNextLine()){
        //Assign to your pojo
        System.out.println(scan.next());
    }
商昆琦
2023-03-14

你可以做一些像。。。

while ((sCurrentLine = br.readLine()) != null) {
    String firstName = sCurrentLine;
    String lastName = br.readLine();
    String age = br.readLine();
    String dob = br.readLine();
}

但这对文件要求做出了相当大的假设,它假设每个条目有4行。

例如,您可以将每个条目放在它自己的行上,并使用分隔符将它们分开

John;Smith;32;1991

然后使用类似于。。。

while ((sCurrentLine = br.readLine()) != null) {
    String parts[] = currentLine.split(";");
    String firstName = parts[0];
    String lastName = parts[1];
    String age = parts[2];
    String dob = parts[3];
}

阅读每个条目。这使您对条目的处理有了更多的控制,因为您可以检查parts数组的长度,以验证它是否具有预期值的数量。

一旦你有了一个条目,你会想要一个更好的方法来管理每个条目,我会创建一个简单的POJO来保存这些值,可能类似于。。。

public class Person {

    private final String fisrtName;
    private final String lastName;
    private final int age;
    private final int dob;

    public Person(String fisrtName, String lastName, int age, int dob) {
        this.fisrtName = fisrtName;
        this.lastName = lastName;
        this.age = age;
        this.dob = dob;
    }

    public String getFisrtName() {
        return fisrtName;
    }

    public String getLastName() {
        return lastName;
    }

    public int getAge() {
        return age;
    }

    public int getDob() {
        return dob;
    }

}

然后,您可以使用列表映射来存储它们,这将更容易管理。。。

List<Person> people = new ArrayList<>(25);
//...
while ((sCurrentLine = br.readLine()) != null) {
    String parts[] = currentLine.split(";");
    String firstName = parts[0];
    String lastName = parts[1];
    String age = parts[2];
    String dob = parts[3];
    people.add(new Person(firstName, lastName, Integer.parseInt(age), Integer.parseInt(dob));
}

另一种解决方案可能是使用Scanner,这将允许您使用NextnextInt来解析每个条目

所以,如果我们将结构改为以下格式。。。

John Smith 32 1991

你可以简单地使用

while ((sCurrentLine = br.readLine()) != null) {
    Scanner scanner = new Scanner(sCurrentLine);
    String firstName = scanner.next();
    String lastName = scanner.next();
    int age = scanner.nextInt();
    int dob = scanner.nextInt();
    people.add(new Person(firstName, lastName, age, dob);
}

相反地

 类似资料:
  • 问题内容: 我正在使用AJAX从文本文件中读取。我如何只读取第一行? 问题答案: 此代码应帮助您从远程文本文件中读取:

  • 我在从xml文件中读取信息时遇到了一点问题... 传给我的文件有几千行。我只对300-400行感兴趣。当用户完成操作并且要读取的数据可以存储在中时,我不需要将任何数据写回xml。 我只对最内部名称元素的感兴趣(前两个是“098-0031”和“098-0032”)。 这是我的代码: 但是条件从来没有填满...谁能给我解释一下为什么。也许可以向我展示一种简单的方法来将这些值存储在中?提前感谢! 编辑:

  • 问题内容: 我开发了一个应用程序,可以从用户选择的文件夹中读取文件。它显示每个文件中有多少行代码。我只希望Java文件显示在文件选择器(扩展名为.java的文件)中。下面是我的代码: 我也进行了编辑,但是仍然无法正常工作,请告知请告知如何仅读取扩展名为.java的文件,换句话说,请仅从文件夹中读取java文件,请告知 问题答案: 您需要一个FilenameFilter。这应该为您工作:

  • 问题内容: 有什么办法可以从中读取文件? 我对库或类/代码文件仅在中定义的字符串不感兴趣 问题答案: 是的,您可以使用以下命令提取所有资源文件 脚步 - 要么

  • 我有一个名为的项目,它有以下结构: 所以这两个文件的路径是: 我想读测试文件。TestDataProvider中的json。JAVA 我曾经用过 我看到从URL res=getClass(). getClassLoader(). getResources("testfile.json")返回; 有人能帮我吗?

  • 问题内容: 我正在尝试使用该模块从python脚本读取json文件。经过一番谷歌搜索后,我发现以下代码: json文件的路径和名称在哪里。我收到以下错误: 问题答案: 该代码用作变量名。它将阴影您导入的模块引用。为变量使用其他名称。 除此之外,代码在接受字符串的同时传递文件对象。 传递文件内容: 或使用接受类似文件的对象。