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