Java-从文件读取并通过数据转换初始化对象

标签 java file object bufferedreader

我有这个文件:“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/

相关文章:

javascript - 为对象的未定义属性寻找比折叠 if 语句更好的解决方案

javascript - 如何使用 React JS 从 JSON 文件中获取嵌套对象

Java - 递归地调度计时器任务

ruby-on-rails - Rails.root 文件路径通配符

JavaFX:如何从其他类访问UI线程组件

c# - 我如何按创建日期列出文件

file - Jenkins:使用文件操作插件中的当前分支复制到动态目标位置

C++ 如何显示/打印字符串对象? cout << int 有效,cout << string 无效

java - Volley GET 并将 JSONObject 请求发布到 TextView 中的 API View

java - 为什么activemq会自行打开套接字