需求:
现在有个需求,当前数据是通过文件传输,文件格式为某个表固定字段里的内容,,每行数据代表一条完整数据,是由0x0f作为分隔符,分隔符之间的字段内容是不定长的,在Java代码中,有什么办法可以读取这个文件,并且取到字段中的内容存到指定实体类接收,用于后续金额对比逻辑操作
要读取具有固定字段和变长字段的文件,并将字段内容存储到指定的实体类中,您可以按照以下步骤进行操作:
- 创建一个实体类,用于存储文件中的字段内容。在实体类中定义与文件中字段对应的属性。
public class Entity {
private String field1;
private String field2;
// 其他字段...
// 构造方法、getter和setter方法
}
- 使用
BufferedReader
和InputStreamReader
来读取文件,并根据分隔符将每行数据拆分为字段。
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,它们都是表示同一个特殊字符,用于在文件中分隔字段内容。在处理这种文件时,您需要使用该字符作为分隔符来将字段内容提取出来。
标签:文件,实体类,String,null,entity,分隔符,Entity,读取 From: https://www.cnblogs.com/chentianxiang180/p/17736496.html