SpringBoot 读取本地txt文件并写入数据库
前言
今天我们就记录一下如何建一个 SpringBoot 项目,通过它读取本地的一个 txt 文件,并把内容写入数据库。重点来捋一捋这其中的逻辑。
一.建SpringBoot项目
-
选择 Spring Initializr ,如下图:
-
之后就点击 next
- Java version 选一下对应的版本,点击 next
- 选择 Web -> Spring Web ,点击 next ,之后起一下项目名,点击 finish 即可。
- 依据 SpringMVC 的思想,构建如下文件,目录结构如下:
二.逻辑
2.1 分析需求
简单理一理就是需要写一个实体类,接受读出的内容,然后写sql语句把内容插入数据库中! 本地文件如下:
书名 ISBN 作者 出版社
原则; 9787508684031; 瑞·达利欧; 中信出版社
阿米巴经营; 9787111502197; 森田直行; 机械工业出版社
追风筝的人; 9787208061644; 卡勒德·胡赛尼; 上海人民出版社
OKR工作法; 9787508679099; 克里斯蒂娜·沃特克; 中信出版社
解忧杂货店; 9787544298995; 东野圭吾; 南海出版公司
数据库可以先在可视化工具中建好表和字段;具体的sql语句就是:
create table db_test.testBook (name varchar(300),ISBN varchar(300),writer varchar(300),cbs varchar(300));
2.2 读文件
这个地方涉及到IO操作,我做的处理比较简单,就是用 File 的 一些 FileInputStream ,InputStreamReader,BufferedReader 读取。因为txt文件中的数据格式不规范,所以读出之后要进行一些处理,比如去除每一行的空格,然后把每一行用 “;” 分割后写入一个数组,之后把数组加入一个list里。 这部分代码如下:对照着理解会更容易一些。
File file=new File("D:/books.txt");//txt文件路径
String tempString=null;
List<Book> books=new ArrayList<Book>();//声明一个list存放数据
int line=-1;
try{
BufferedReader reader=new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8"));//注意编码格式UTF-8,这里就是读出内容;
while ((tempString=reader.readLine())!=null){
line++;
if(line>=1){//第一行是表头,数据库里不需要了
String s=tempString.replaceAll("\s*", "");//去除行内所有空格
String [] ary=s.split(";");//把每行字符串分割
Book book=new Book();//声明实体类对象
book.setName(ary[0]);//取对应的值
book.setISBN(ary[1]);
book.setWriter(ary[2]);
book.setCbs(ary[3]);
books.add(book);//添加到list里
}
}
reader.close();//注意关闭读写流
}catch (FileNotFoundException e){
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}//处理异常
2.3 写入数据库
在BookMapper.xml文件里写sql语句,因为文件有很多行,所以插入数据库的时候有很多条记录,这里采用一个foreach方法循环插入,可以完美地解决!注意: insert 语句结尾不要加符号!foreach里的separator 是“,” ,不是分号!当数据库里有多个模式的时候,要加上模式名!
<insert id="insertBook" parameterType="com.example.homework0804.model.Book">
insert into db_test.testBook values
<foreach collection='list' item='item' index='index' separator=','>
(#{item.name},#{item.ISBN},#{item.writer},#{item.cbs})
</foreach>
</insert>
三.调试
3.1 步骤:
运行项目,在浏览器地址栏输入:localhost:项目端口号/swagger-ui.html
点进去就有我们写的这个 POST 方法,再点进去 POST 方法就是下面这样:
点击 Try it out 运行,成功的话会在 Response 里返回200!在 Description 里会有一个数字,表示插入数据库几条记录!然后我们打开数据库查询就能看到对应的数据!
3.2 经验
在运行的时候页面如下:
明明我们写了POST接口,但是页面上没有内容!IDEA 也不报错!检查浏览器控制台发现:
Failed to load resource: the server responded with a status of 404 ()
这是因为 Swagger2Config里扫描接口的包包名有误!
@Configuration
@EnableSwagger2
public class Swagger2Config {
@Bean
public Docket getUserDocket(){
ApiInfo apiInfo=new ApiInfoBuilder()
.title("Springboot基础")//api标题
.description("Springboot基础文档")//api描述
.version("1.0.0")//版本号
.contact("张三")//本API负责人的联系信息
.build();
return new Docket(DocumentationType.SWAGGER_2)//文档类型(swagger2)
.apiInfo(apiInfo)//设置包含在json ResourceListing响应中的api元信息
.select()//启动用于api选择的构建器
.apis(RequestHandlerSelectors.basePackage("com.example.homework0804.controller"))//扫描接口的包 正确 //.apis(RequestHandlerSelectors.basePackage("com.example.homework.controller"))//扫描接口的包 错误
.paths(PathSelectors.any())//路径过滤器(扫描所有路径)
.build();
}
}
这也是我的一个经验教训,在这里记录并分享给大家!
转载自:https://juejin.cn/post/6992952834673082399