使用 java 拆分从文件中解析日期
Parse date from file using java split
我有解析文件然后将行插入 table 的代码。我最初忽略了第一行,因为它只有日期和无用的数据。我现在想获取日期并将其插入我的 table 中的所有行,但不知道如何真正做到这一点。我知道我需要编辑我的实体以包含日期,但不知道如何编辑我的代码来解析日期,或者是否最好有一个只插入日期的新方法。
文件格式
20200310|extra|extra|extra||
Mn1223|01192|windows|extra|extra|extra||
Sd1223|02390|linux|extra|extra|extra||
2
当前table
account_name command_name system_name createDt
Mn1223 01192 windows NULL
Sd1223 02390 linux NULL
我想将 20200310
插入到 createDt
Entity/model
public ZygateEntity(String accountName, String commandName, String systemName){
this.accountName=accountName;
this.commandName=commandName;
this.systemName=systemName;
}
//getters and setters
解析文件方法
private List<ZygateEntity> parseZygateData() throws IOException {
String filePath = "C:\DEV\Test_file.xlsx";
List<String> lines = Files.readAllLines(Paths.get(filePath));
// remove date and amount
lines.remove(0);
lines.remove(lines.size() - 1);
return lines.stream()
.map(s -> s.split("[|]")).map(val -> new ZygateEntity(val[0],val[1],val[2])).collect(Collectors.toList());
}
插入方法
public void insertZygateData(List<ZygateEntity> parseData) {
String sql = "INSERT INTO Landing.midrange_xygate_load (account_name,command_name,system_name)"+
"VALUES (:account_name,:command_name,:system_name)";
for (ZygateEntity zygateInfo : parseData){
SqlParameterSource source = new MapSqlParameterSource("account_name", zygateInfo.getAccountName())
.addValue("command_name", zygateInfo.getCommandName())
.addValue("system_name", zygateInfo.getSystemName());
namedParameterJdbcTemplate.update(sql, source);
}
}
java.time
// remove date and amount
String dateLine = lines.remove(0);
String dateString = dateLine.split("[|]")[0];
LocalDate date
= LocalDate.parse(dateString, DateTimeFormatter.BASIC_ISO_DATE);
lines.remove(lines.size() - 1);
这为您提供了一个可以插入每一行的 LocalDate
对象。
java.time 是现代的 Java 日期和时间 API,并且有一个用于日期格式的内置格式化程序,20200310
:DateTimeFormatter.BASIC_ISO_DATE
。
我有解析文件然后将行插入 table 的代码。我最初忽略了第一行,因为它只有日期和无用的数据。我现在想获取日期并将其插入我的 table 中的所有行,但不知道如何真正做到这一点。我知道我需要编辑我的实体以包含日期,但不知道如何编辑我的代码来解析日期,或者是否最好有一个只插入日期的新方法。
文件格式
20200310|extra|extra|extra||
Mn1223|01192|windows|extra|extra|extra||
Sd1223|02390|linux|extra|extra|extra||
2
当前table
account_name command_name system_name createDt
Mn1223 01192 windows NULL
Sd1223 02390 linux NULL
我想将 20200310
插入到 createDt
Entity/model
public ZygateEntity(String accountName, String commandName, String systemName){
this.accountName=accountName;
this.commandName=commandName;
this.systemName=systemName;
}
//getters and setters
解析文件方法
private List<ZygateEntity> parseZygateData() throws IOException {
String filePath = "C:\DEV\Test_file.xlsx";
List<String> lines = Files.readAllLines(Paths.get(filePath));
// remove date and amount
lines.remove(0);
lines.remove(lines.size() - 1);
return lines.stream()
.map(s -> s.split("[|]")).map(val -> new ZygateEntity(val[0],val[1],val[2])).collect(Collectors.toList());
}
插入方法
public void insertZygateData(List<ZygateEntity> parseData) {
String sql = "INSERT INTO Landing.midrange_xygate_load (account_name,command_name,system_name)"+
"VALUES (:account_name,:command_name,:system_name)";
for (ZygateEntity zygateInfo : parseData){
SqlParameterSource source = new MapSqlParameterSource("account_name", zygateInfo.getAccountName())
.addValue("command_name", zygateInfo.getCommandName())
.addValue("system_name", zygateInfo.getSystemName());
namedParameterJdbcTemplate.update(sql, source);
}
}
java.time
// remove date and amount
String dateLine = lines.remove(0);
String dateString = dateLine.split("[|]")[0];
LocalDate date
= LocalDate.parse(dateString, DateTimeFormatter.BASIC_ISO_DATE);
lines.remove(lines.size() - 1);
这为您提供了一个可以插入每一行的 LocalDate
对象。
java.time 是现代的 Java 日期和时间 API,并且有一个用于日期格式的内置格式化程序,20200310
:DateTimeFormatter.BASIC_ISO_DATE
。