对文件数据根据分隔符进行读取操作

发布时间 2023-09-28 21:08:38作者: 我想喝杨枝甘露~

需求:

现在有个需求,当前数据是通过文件传输,文件格式为某个表固定字段里的内容,,每行数据代表一条完整数据,是由0x0f作为分隔符,分隔符之间的字段内容是不定长的,在Java代码中,有什么办法可以读取这个文件,并且取到字段中的内容存到指定实体类接收,用于后续金额对比逻辑操作

要读取具有固定字段和变长字段的文件,并将字段内容存储到指定的实体类中,您可以按照以下步骤进行操作:

  1. 创建一个实体类,用于存储文件中的字段内容。在实体类中定义与文件中字段对应的属性。
public class Entity {
    private String field1;
    private String field2;
    // 其他字段...
    
    // 构造方法、getter和setter方法
}
  1. 使用BufferedReaderInputStreamReader来读取文件,并根据分隔符将每行数据拆分为字段。
try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("file.txt"), "UTF-8"))) {
    String line;
    while ((line = reader.readLine()) != null) {
        String[] fields = line.split("\u000F"); // 使用0x0F作为分隔符,注意需要转义
        
        // 创建实体类对象并赋值
        Entity entity = new Entity();
        entity.setField1(fields[0]);
        entity.setField2(fields[1]);
        // 设置其他字段的值...
        
        // 进行金额对比逻辑操作
        // ...
    }
} catch (IOException e) {
    e.printStackTrace();
}

在上述代码中,我们使用BufferedReader逐行读取文件内容,并使用split方法将每行数据按照分隔符拆分为字段数组。然后,我们创建一个实体类对象,并将拆分的字段值设置到相应的属性中。

随后,您可以在注释部分编写金额对比逻辑操作的代码,根据需要进行金额对比操作。

请注意,上述代码仅为示例,您需要根据实际的文件格式和字段定义进行适当的修改。另外,还需要处理异常情况和关闭文件流的操作。


接着上文,既然是字段是不定长的,那两个分隔符之间没有值为空这样的话,程序会不会报错
如果两个分隔符之间没有值为空,程序不会报错。它会将空字符串或者null值分配给对应的字段。你可以在实体类中将这些字段声明为字符串类型,并在后续的金额对比逻辑操作中进行必要的判断和处理。以下是一个简单的示例代码,演示了如何处理空字符串或null值:

public class Entity {
    private String field1;
    private String field2;
    
    // getter和setter方法
    
    // 其他逻辑操作方法
}

public class Main {
    public static void main(String[] args) {
        String line = "value1,value2,,value4";
        String[] values = line.split(",");
        
        Entity entity = new Entity();
        entity.setField1(values[0]);
        entity.setField2(values[1]);
        
        if (values[2] != null && !values[2].isEmpty()) {
            // 对空字符串或null值进行处理
        }
        
        entity.setField4(values[3]);
        
        // 后续的金额对比逻辑操作
    }
}

在上面的示例代码中,如果第三个字段为空或null,可以在if语句中进行必要的处理。你可以根据实际需求来编写相应的逻辑操作。


我还想问下,这个0x0f分隔符,到底是什么,为什么在有的服务器上显示为^0呢
0x0f是一种十六进制的表示形式,它代表了一个特殊字符,被称为"Device Control 1"(设备控制1)。这个字符在ASCII码中有一个对应的值,即十进制的15。

在某些服务器上,0x0f字符可能会被显示为0。这是因为在早期的计算机系统中,一些字符没有直接的可见表示形式,因此使用了一些转义字符来表示它们。""符号是其中之一,它用于表示控制字符。"^0"就是表示十六进制的0x0f字符。

总的来说,无论是显示为0x0f还是^0,它们都是表示同一个特殊字符,用于在文件中分隔字段内容。在处理这种文件时,您需要使用该字符作为分隔符来将字段内容提取出来。