Java 将字符串转换为枚举以允许读取文件

Java 将字符串转换为枚举以允许读取文件,java,Java,我正在编写代码,需要获取一个文件输入,然后将值重建到ArrayList中 这是我到目前为止所做的将文件转换为对象的代码 public static ArrayList<User> fileToObject() { ArrayList<User> FileToObject = new ArrayList<>(); Scanner in = null; boolean err0 = false;

我正在编写代码,需要获取一个文件输入,然后将值重建到ArrayList中

这是我到目前为止所做的将文件转换为对象的代码

  public static ArrayList<User> fileToObject() {

        ArrayList<User> FileToObject = new ArrayList<>();
        Scanner in = null;
        boolean err0 = false;
        try {
            in = new Scanner(Paths.get("User_info.txt"));
        } catch (IOException ex) {
            err0 = true;
        }
        if (!err0) // if couldn't open file then skip
        {
            while (in.hasNext()) {
                String theUser = in.nextLine();
                String[] Line = theUser.split(",");


                User user = null;
                try {
                    if ( Line.length == 10) {
                        // reconstruct Address
                        Address a1 = new Address( Line[2],  Line[3],  Line[4],  Line[5],  Line[6],
                                Integer.parseInt( Line[7]));
                        // reconstruct Customer
                        user = new Customer( Line[0], Line[1], Line[2], Line[3], Line[4], Line[5], Line[6], Line[7],a1, Line[14]);
                         FileToObject.add(user);

                    } else {
                        return null;
                    }
                } catch (NoSuchElementException ex) {
                    System.out.println("File improperly formed. Terminating.");
                }
            }
            in.close();

        }
        // write object back to file.
        File f1 = new File(Paths.get("User_info.txt").toUri());
        Formatter out = null;
        boolean err = false;
        try {
            out = new Formatter(f1);
        } catch (FileNotFoundException ex) {
            err = true;
        }
        if (!err) {
            //System.out.println(e3.size());
            for (User i :  FileToObject) {
                out.format("%s%n", i.toString()); // output the card object to cvs format
            }
            out.close();
        }

    }

}



我和我的导师谈过,他告诉我需要将字符串转换为枚举。我不确定他这是什么意思,因为他不会进一步解释。他说的是字符串数组,还是我需要将正在读取的文件中的字符串转换为枚举?我有点迷路了,因此非常感谢您的帮助

如果
UserType
enum
,您可以使用静态
UserType.valueOf()
方法对其进行转换,即:

UserType userType = UserType.valueOf(Line[5]);
现在,您可以使用
userType
代替以下代码中的
Line[5]


请注意,
行[5]
必须与任何枚举类型的拼写完全匹配,否则将抛出
IllegalArgumentException

如果
UserType
enum
,则可以使用静态
UserType.valueOf()
方法将其转换,即:

UserType userType = UserType.valueOf(Line[5]);
现在,您可以使用
userType
代替以下代码中的
Line[5]


请注意,
Line[5]
必须与任何枚举类型的拼写完全匹配,否则将抛出
IllegalArgumentException

如果
UserType.valueOf
无法提供所需内容,请添加一个返回特定
UserType
实例的静态方法。例如:-

public enum UserType{

    CUSTOMER("customer");

    private String name;

    UserType(String name){
        this.name = name;
    }

    //A Map that holds user type name as key.
    private static Map<String,UserType> userTypeMap = new HashMap<>();

    //Populate userTypeMap with UserType instance
    static{
        for(UserType type : values()){
            userTypeMap.put(type.name, type);
        }
    }

    public static UserType of(String name){

        return userTypeMap.get(name);
    }
}

如果
UserType.valueOf
无法提供所需内容,请添加一个返回特定
UserType
实例的静态方法。例如:-

public enum UserType{

    CUSTOMER("customer");

    private String name;

    UserType(String name){
        this.name = name;
    }

    //A Map that holds user type name as key.
    private static Map<String,UserType> userTypeMap = new HashMap<>();

    //Populate userTypeMap with UserType instance
    static{
        for(UserType type : values()){
            userTypeMap.put(type.name, type);
        }
    }

    public static UserType of(String name){

        return userTypeMap.get(name);
    }
}

你的解决方案太长了。有一种优雅的方法可以做到这一点

Properties properties = new Properties();
properties.load(new FileInputStream(new File("FileLocation")));
properties.values();

文件可以包含、值列表、键值对。在第2行,文件加载到属性对象中。现在你可以根据需要处理它。

你的解决方案太长了。有一种优雅的方法可以做到这一点

Properties properties = new Properties();
properties.load(new FileInputStream(new File("FileLocation")));
properties.values();

文件可以包含、值列表、键值对。在第2行,文件加载到属性对象中。现在你可以根据需要处理它了。

他很可能是说你应该使用MyEnum.valueOf(第[5]行)等将字符串转换为enum元素。`@JoakimDanielson我试过了,但我总是遇到语法错误。我是将它放在转换文件的方法中,还是在customer类中转换它?您应该遵循Java命名约定:变量名总是用camelCase编写的。例如,
FileToObject
应该是
FileToObject
。他最可能的意思是你应该用它把字符串转换成枚举元素,比如MyEnum.valueOf(第[5]行),`@JoakimDanielson我试过了,但我总是遇到语法错误。我是将它放在转换文件的方法中,还是在customer类中转换它?您应该遵循Java命名约定:变量名总是用camelCase编写的。例如,
FileToObject
应该是
FileToObject
。这很好,但为了更清楚,您是否介意将导入也包含在代码段中?e、 这将允许OP了解您指的是f.x.java.util.Properties是核心java包的哪些属性。导入java.io.File;导入java.io.FileInputStream;导入java.util.Properties;为这样简单的任务提供一个文件是过分的。这些是字符串,不是枚举。如果您的API需要枚举,它将不会对您有所帮助。这很好,但为了更清楚地说明这一点,您是否介意将导入也包含在代码段中?e、 这将允许OP了解您指的是f.x.java.util.Properties是核心java包的哪些属性。导入java.io.File;导入java.io.FileInputStream;导入java.util.Properties;为这样简单的任务提供一个文件是过分的。这些是字符串,不是枚举。如果您的API需要枚举,则对您没有帮助。