java - 从文本文件初始化对象数组

标签 java arrays file text bufferedreader

我有一个程序需要存储用户信息并添加用户。为了使其持久化,程序会读取所有用户数据并在启动时初始化用户数组,然后在关闭之前保存信息。这是我的用户类别:

class User {
    String name;
    int val = -1;
    int oldVal = -1;

    public User(String n){
        try{
             BufferedReader dataReader = new BufferedReader(new FileReader("/Users/" + n));
             name = dataReader.readLine();
             val = Integer.parseInt(dataReader.readLine());
             oldVal = Integer.parseInt(dataReader.readLine());
        } catch (Exception e){}
    }

此类从/users 中的文件读取,格式为 name.txt

 John
 90
 100

我的核心类如下所示:

import java.io.BufferedReader;
import java.io.FileReader;

class Core{
    public static void main (String[] args){
        int numUsers = -1;
        BufferedReader nameReader = null;
        User[] users = null;

        try {
            nameReader = new BufferedReader(new FileReader("Users/users.txt"));
            numUsers = Integer.parseInt(nameReader.readLine());
            users = new User[numUsers];

            for (int i = 0; i < numUsers; i++){
                users[i] = new User(nameReader.readLine());
            }
        } catch (Exception e) {
            System.out.println("Something went wrong. Aborting!");
            System.exit(1);
        }
        for (int i = 0; i < numUsers; i++){
            System.out.println("User " + users[i].getName() + "\n Val:" + users[i].getVal() + "\n oldVal: " + users[i].getOldVal());
        }
    }
}

但是运行核心会返回:

User null
val: -1
oldVal: -1

对于每个用户。 问题是什么?我制作的系统是否可行,或者我是否需要完全改变我的程序的基础?

(编辑更改标签)

最佳答案

您的核心正在相对路径Users/中查找文件。您的另一个类正在绝对路径 /Users/ 中查找。

您的文字描述表明您需要 /users/ (小写)。在某些系统上,这又会有所不同。

我怀疑这是导致问题的原因,或者至少是部分问题的原因。

看起来你真正想要的是一个相对路径,以及末尾的 .txt :

BufferedReader dataReader = new BufferedReader(new FileReader("Users/" + n + ".txt"));

关于java - 从文本文件初始化对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26193490/

相关文章:

c++ - 如何以这种方式从另一个文件访问方法/函数?

Android httpPost 带参数和文件

java - 哪个ExecutorService最适合阻塞IO任务

java - maven 程序集插件不包括我在构建的 jar 中的类

java - getByte() 为不同的字符串返回相同的字节[]

java - 根据一行数据对二维数组进行排序

java - 如果不存在则插入?

Java 8 在接口(interface)默认方法中使用枚举值

javascript - 循环访问 javascript 对象数组中的多个变量

java - List.Add 在 Java 中意外多次添加相同的内容