public String uploadBook(MultipartFile file, Book book, HttpServletRequest request) {

try{

String lineTxt = null;

String content="";

List titlelist=new ArrayList();

InputStream inputStream = null;//获得字节流

if(!file.isEmpty()){

InputStreamReader inputStreamReader=null;

String url = request.getSession().getServletContext().getRealPath("/upload");

String realPath=url+file.getOriginalFilename();

File tempFile=new File(realPath);

//把文件上传到指定的位置

file.transferTo(tempFile);

//new 两个字节流

InputStream ins1=new FileInputStream(tempFile);

InputStream ins2=new FileInputStream(tempFile);

//new 第一个是用来读取txt前几个字节,来判断编码格式,因为你不确定上传上来的到底是什么格式

byte[]ch=new byte[1024];

ins1.read(ch);

if(Utf8Util.isUtf8(ch)){

//第二个用来读取txt内容

inputStreamReader = new InputStreamReader(ins2,"UTF-8");//获得字符流

}else{

inputStreamReader = new InputStreamReader(ins2,"GBK");//获得字符流

}

ins1.close();

// InputStreamReader inputStreamReader = new InputStreamReader(inputStream);//获得字符流

BufferedReader bufferedReader = new BufferedReader(inputStreamReader);//缓存数据用于读取

while((lineTxt = bufferedReader.readLine())!= null) {

if(validReg(lineTxt)&&lineTxt.length()<100){

titlelist.add(lineTxt);

content=content+"####";

}else{

if(StringUtils.isNotEmpty(lineTxt.trim())){

content+="

"+lineTxt+"

";

}

}

}

//读完之后,别忘了把文件删除,删除之前先把流关上

bufferedReader.close();

ins2.close();

tempFile.delete();

if(StringUtils.isNotEmpty(content)){

String chapterlist[]=content.split("####");

if(chapterlist.length>0){

for(int i=1;i

chapter.setWords(String.valueOf(msg.length()));

chapter.setContent(msg);

chapterMapper.insertChapter(chapter);

}

}

}

}

return "导入成功!";

}catch (Exception e){

e.printStackTrace();

return "导入失败!";

}

}

注解:为什么要new 两个ins?

因为,读取文件之后

byte[]ch=new byte[1024];

ins1.read(ch);

1的指针已经指向后1024个字节,如果继续读取,就会丢失前面判断编码的,大小的字节内容,所以要new 两个

为什么不直接用filetemp=file?

因为文件复制,一旦你调用一个属性,另外一个的属性也会跟着变,都是指向同一个地址,所以不能直接复制

java 文件上传乱码_java上传txt文件,出现中文乱码相关推荐

  1. java输出txt乱码_Java程序输出txt文件内容时中文乱码怎么处理?

    中文乱码解决方案:代码如下,请参照public class TestStream {public static void main(String[] args) throws Exception{Da ...

  2. java mysql插入数据乱码_java连接mysql插入数据出现中文乱码

    java连接了mysql数据库后,程序行向数据库中插入信息,代码如下: dbhelper boringdb = new dbhelper(); boringdb.connSQL(); String i ...

  3. java tcp 乱码_Java和C++通过Socket通信中文乱码的解决

    理想的开发状态是我开始就是C开发,一直是C的开发,现在还是C的开发,若干年后,幸运的话,我可以成为C语言的高手或者专家-- 更实际的情况是我开始是C开发,后来变成了JAVA开发,然后又做起了VC++的 ...

  4. java 配置文件乱码_java程序读取properties配置文件出现中文乱码

    这个问题有两种办法: 第一种办法:如楼上所说的那样也可以,就是native2ascii -reverse -encoding gb2312 user.properties ActionName_zh_ ...

  5. java计算文件里的总分_java程序读取txt文件并计算总分 求帮忙

    展开全部 你这个不难,就是字符串处理, 你的文件修改下:每行两两元素636f70793231313335323631343130323136353331333332636336之间的空格用一个,如果超 ...

  6. 【Java文件操作(五)】从txt文件中读取字符串、乱码原因

    我的博客--Java文件操作系列 [Java文件操作(一)]递归打印文件目录 [Java文件操作(二)]删除文件夹,但保留其内部文件 [Java文件操作(三)]递归复制文件夹内所有文件 [Java文件 ...

  7. java+txt+词语+次数_Java练习2--读取txt文件统计考勤次数并写入一个txt文件中

    Java练习2--读取txt文件统计考勤次数并写入一个txt文件中 Java练习2--读取txt文件统计考勤次数并写入一个txt文件中 面向对象的小练习: 文件attendance.txt中的数据为本 ...

  8. java把mysql大数据量表每个文件最多10MB分批次写入到txt文件中

    需求描述: 现在利率报备系统需要把数据上传到第三方系统,表中的数据量非常大,我们需要把表中的数据生成txt文件,然后上传到第三方系统,并且,上传的txt有大小限制,不能超过10MB,后面还需要压缩成z ...

  9. java中文乱码 寮犱笁_MySQL命令窗口中文乱码或插入中文数据失败

    在Windwos上使用命令窗口操作MySQL数据库时,如果命令窗口的字符编码与数据库不一致时,就会出现中文乱码的情况 比如查询会出现中文乱码,或者插入数据会出现错误"ERROR 1366 ( ...

  10. centos php 中文乱码,XShell连接CentOS 7.2显示中文乱码问题的解决方法

    背景 使用U盘往Windows主机.Linux主机传文件还是经常的事,但有时候文件名有中文, 传到Linux机器会有乱码,选择起来也很麻烦,最近刚好遇到,写下解决方法. 环境 Linux [root@ ...

最新文章

  1. 利用kickstart实现pxe自动安装linux
  2. 简明python教程在线-简明python教程
  3. 3、Power Query-智能汇总工作簿下的指定或所有工作表数据
  4. android attrs获取_Android 常用侧滑栏实现
  5. 最近任务-2012.05.14
  6. 【英语-刘晓艳-词汇】词汇06
  7. HttpNotificationChannel 云端推送信息实现
  8. python磁盘io_Python多线程同步、互斥锁、死锁
  9. php操作memcache的使用测试总结
  10. Linux 实例如何开启 MySQL 慢查询功能
  11. [渝粤教育] 西南科技大学 婚姻家庭继承法 在线考试复习资料
  12. 《MySQL必知必会》学习笔记——第四章(检索数据)
  13. java 公众号文章爬取_50行代码爬取微信公众号所有文章
  14. DevOps案例研究|中华有为-解构华为软开云DevOps实践
  15. 创翼软件linux版本,电信创翼客户端下载
  16. 字节跳动不需要总部大楼
  17. VGA带音频转HDMI转换芯片|VGA转HDMI 转换器方案|VGA转HDMI转换器芯片介绍
  18. 【MMDblender】MMD烘焙后导入blender贴图颜色错乱问题
  19. h5(网页) 调用相机拍照和相册,实现图片上传功能
  20. Linux下shell脚本的4中执行方式

热门文章

  1. 饿了么为啥给你推荐这个?本地生活搜索算法解密
  2. 生产环境服务端报错:阿里云IOT连接中断
  3. mmap内存映射原理
  4. Facebook联手纽约大学,要把核磁共振成像时间缩短10倍
  5. 050001 《拆掉思维里的墙》读后感——一些现象的解释
  6. 微信小程序跳转公众号文章非web-view
  7. 你需要一份更绝佳的文章排版与设计
  8. 我的世界服务器修改nbt,我的世界NBT教程 关于NBT作用与内容介绍
  9. 给所有大龄测试员写的一份信
  10. 从南极之争谈软件架构十个技巧,及成功团队具备的气质