我有这个文件:“Test.txt” -> 1,cont,details,950.5,asd
我的类是Auto,构造函数是int, string, string, double, string
。
如何从此文件中读取内容,然后使用正确的数据转换来初始化我的对象?
我想我也需要使用逗号分隔符。
FileReader inFile2=null;
BufferedReader outBuffer2=null;
inFile2=new FileReader("Test.txt");
outBuffer2 = new BufferedReader(inFile2);
List<String> lines = new ArrayList<String>();
String line="";
while((line = outBuffer2.readLine()) != null) {
lines.add(line);
System.out.println(lines);
}
outBuffer2.close();
inFile2.close();
//
String[] splitTranzactie = lines.toArray(new String[]{});
Auto t = new Auto(Int32(splitTranzactie[0]), splitTranzactie[1], splitTranzactie[2],
ToDouble(splitTranzactie[3]), splitTranzactie[4]);
最佳答案
这里有一些问题。首先:
String[] splitTranzactie = lines.toArray(new String[]{});
只是将行列表转换为行数组。要将每一行拆分为其组成部分,您可以使用 String.split(",") 之类的方法。这将返回一个字符串数组。请注意,如果您希望最后一个值中的任何一个为空,即以一个或多个逗号结尾,则返回的数组将与它找到的最后一个值位置一样长。即,如果该行是 1,cont,details,,
,您拆分后将返回一个长度为 3 而不是 5 的数组。您应该对此进行防御性编码。
要将字符串转换为 int 或 double,您可以分别使用 Integer.parseInt()
和 Double.parseInt()
。同样,如果值可能不是数值,您可能需要考虑进行防御性编码,因为如果这两种方法无法解析输入,它们将抛出异常。
您还应该将 close()
方法放在 finally block 中,以确保调用它们,但是由于它们是 AutoCloseable
,您可以通过使用 try 来完全避免这种情况-with-resources 语法将自动关闭阅读器。
try(Reader in = new Reader()) {
}
按照您的示例,包含上述所有内容(但没有任何防御代码)的工作示例可能如下所示:
List<Auto> autos = new ArrayList<>();
try (BufferedReader in = new BufferedReader(new FileReader("Test.txt"))) {
String line = null;
while((line = in.readLine()) != null) {
String[] values = line.split(",");
autos.add(new Auto(
Integer.parseInt(values[0]),
values[1],
values[2],
Double.parseDouble(values[3]),
values[4]));
}
}
关于Java-从文件读取并通过数据转换初始化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56566297/