String读取的数据如何用实体类保存到数据库?

Raven丶 2019-03-22 09:15:39
//先定义一个字节数组存放数据
File file = new File(fileName);
BufferedReader reader = null;
reader = new BufferedReader(new FileReader(file));
String tempString = null;
int line = 1;
// 一次读入一行,直到读入null为文件结束
while ((tempString = reader.readLine()) != null) {
// 显示行号
System.out.println("line " + line + ": " + tempString);
//调用Mapper层一次一行入库
// posDao.importFile(); ????????
line++;
}
因为读取的是一个二进制文件,用了String的.readLine方法读取一行,接下来纳闷怎么把它用实体类保存到数据库,持久层用的是Mybatis,只要把字符型转化为实体类对象就可以实现了,可是不知道怎么转,郁闷. .. ...
...全文
631 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Raven丶 2019-03-27
  • 打赏
  • 举报
回复
谢谢各位,自己摸索出来了,因为一个.bin文件没有明确的字段,只能使用截取拼接,我贴一下代码
*/
public List<Pos> string2pos(List<String> ftpDatas) throws IOException{
List<Pos> listPos=new ArrayList<Pos>();
//String
for(String ftpData:ftpDatas) {
Pos pos=new Pos();
pos.setZoneno(ftpData.substring(0, 5));
pos.setBrno(ftpData.substring(5, 10));
pos.setCenbrno(ftpData.substring(10, 15));
pos.setTellerno(ftpData.substring(15, 20));
pos.setWorkdate(ftpData.substring(20, 30));//String
pos.setBackup3(ftpData.substring(768, 868));
pos.setBackup4(ftpData.substring(868, ftpData.length()));
System.out.println(pos);
listPos.add(pos);
//posDao.importFile(pos);
}
return listPos;
}

再定义一个工具类将读取的文件解码,subString截取.bin文件出现了乱码,在工具类里
public static List<String> readFileFromFTP(String ftpUserName, String ftpPassword,
String ftpPath, String ftpHost, int ftpPort, String fileName) throws Exception {
List<String> Ftplist=new ArrayList<String>();
StringBuffer resultBuffer = new StringBuffer();
InputStream in = null;
FTPClient ftpClient = null;
logger.info("开始从绝对路径:" + ftpPath + "读取文件!");
try {
ftpClient = FTPUtils.getFTPClient(ftpHost, ftpUserName,ftpPassword, ftpPort);
//ftpClient.setControlEncoding("UTF-8"); // 中文支持
//ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.enterLocalPassiveMode();
ftpClient.changeWorkingDirectory(ftpPath);
in = ftpClient.retrieveFileStream(fileName);
} catch (FileNotFoundException e) {
logger.error("没有找到" + ftpPath + "文件");
e.printStackTrace();
} catch (SocketException e) {
logger.error("连接FTP失败!");
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
logger.error("文件读取错误!");
e.printStackTrace();

}
if (in != null) {
BufferedReader br = new BufferedReader(new InputStreamReader(in,"gb2312"));
String data = null;
try {
while ((data = br.readLine()) != null) {
Ftplist.add(data);
}
} catch (IOException e) {
logger.error("文件读取错误。");
e.printStackTrace();

}finally{
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return Ftplist;
最后再调用dao方法来入库,思路还是比较清晰的。
我一会去写个博客记录一下
cl_lllll 2019-03-22
  • 打赏
  • 举报
回复
创建一个实体类,设置的属性与数据库的字段对应,将读取到字符型数据封装到实体类中,就可以实现字符型转换为实体类对象了
  • 打赏
  • 举报
回复
和mybatis交互一定是对象,不论文件是什么都要先转成对象再insert.至于一次插入一行数据,还是你把数据存在list<>再入DB都行
931828653 2019-03-22
  • 打赏
  • 举报
回复
是从 excel读取, 然后 存入库中? 建议 用 流 InputStream
鸣鸣Amadues 2019-03-22
  • 打赏
  • 举报
回复
你直接存文件二进制流就可以了,设计一个类,就一个属性,把二进制流赋值给那个属性就行了。

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧