博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java使 FileWriter FileReader 无编码格式,OutputStreamWriter InputStreamReader可设置编码格式
阅读量:3585 次
发布时间:2019-05-20

本文共 1545 字,大约阅读时间需要 5 分钟。

使用Java中的 FileWriter FileReader 可以传个文件路径,然后就可以简单的实现,文件的读和写。

但是这个实现是太简单了,会有问题的。

简单的代码操作,如我的这篇博文里面的转存文件的代码就是使用这2个类来实现的。

上面的转存代码,经过findbugs分析,有如下的提示:

具体如下:

Found reliance on default encoding: new java.io.FileWriter(String)
Reliance on default encoding
Found a call to a method which will perform a byte to String (or String to byte) conversion, and will assume that the default platform encoding is suitable. This will cause the application behaviour to vary between platforms. Use an alternative API and specify a charset name or Charset object explicitly.
然后,翻译一下就是下图:

FileWriter FileReader 是不带编码格式的,默认使用本机器的默认编码,那么就会因为编码问题,而bug的。

怎么让 FileWriter FileReader 他们带上编码格式呢?

还是拿转存文件的代码来修改。具体修改如下。

[java]   
  1. private static boolean copyFile(String src, String des) {  
  2.     InputStreamReader fr = ;  
  3.     OutputStreamWriter fw = ;  
  4.     try {  
  5.         fr = new InputStreamReader(new FileInputStream(src),"UTF-8");//读  
  6.         fw = new OutputStreamWriter(new FileOutputStream(des), "UTF-8");//写  
  7.         char[] buf = new char[1024];//缓冲区  
  8.         int len;  
  9.         while ((len = fr.read(buf)) != -1) {  
  10.             fw.write(buf, 0, len);//读几个写几个  
  11.         }  
  12.         return true;  
  13.     } catch (IOException e) {  
  14.         LOG.error(e.getMessage());  
  15.         return false;  
  16.     } finally {  
  17.         if (fr != ) {  
  18.             try {  
  19.                 fr.close();  
  20.             } catch (IOException e) {  
  21.                 LOG.error(e.getMessage());  
  22.             }  
  23.         }  
  24.         if (fw != ) {  
  25.             try {  
  26.                 fw.flush();  
  27.                 fw.close();  
  28.             } catch (IOException e) {  
  29.                 LOG.error(e.getMessage());  
  30.             }  
  31.         }  
  32.     }  
  33. }  

重点就是把

FileWriter FileReader   换成了  OutputStreamWriter InputStreamReader 

new InputStreamReader(new FileInputStream(src),"UTF-8");//读
new OutputStreamWriter(new FileOutputStream(des), "UTF-8");//写

这就带上了编码格式了。

你可能感兴趣的文章
centos7设置svn开机自启
查看>>
nginx负载均衡配置
查看>>
idea将普通java代码打成jar包
查看>>
java快速读取大数据量的Excel文件,格式为.xlsx
查看>>
将普通maven工程中某一接口改造成dubbo服务
查看>>
k8s集群中其他节点也可以执行kubectl命令
查看>>
使用docker制作tomcat镜像
查看>>
shell脚本读取文件内容,并写出新文件
查看>>
在docker宿主机上运行docker中container中的执行的命令
查看>>
nginx和tomcat的ssl认证使用https协议访问
查看>>
docker使用tomcat部署应用
查看>>
linux服务器之间复制文件
查看>>
k8s集群搭建
查看>>
自己的阿里云镜像加速器查找
查看>>
spring-cloud-eureka初体验
查看>>
spring-cloud-ribbon简单使用
查看>>
spring-cloud-feign的简单使用
查看>>
spring-cloud-hystrix简单使用
查看>>
docker批量删除镜像
查看>>
deeping操作系统修改已挂载卷名称
查看>>