Java底层代码实现单文件读取和写入(解决中文乱码问题)
需求:
将"E:/data/车站一次/阿坝藏族羌族自治州.csv"文件中的内容读取,写入到"E:/data//车站一次.csv"。
代码:
public class FileOpe {
public static void main(String[] args) {
sigle();
}
public static void sigle(){
BufferedReader bufr = null;
BufferedWriter bufw = null;
try {
FileReader fr = new FileReader( "E:/data/车站一次/阿坝藏族羌族自治州.csv");
bufr = new BufferedReader(fr);
FileWriter fw = new FileWriter( "E:/data//车站一次.csv",true);
bufw = new BufferedWriter(fw);
String line = null;
while((line=bufr.readLine())!=null){
bufw.write(line);
bufw.newLine();
bufw.flush();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
try {
if(bufr!=null)
bufr.close();
if(bufw!=null)
bufw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
但是,这样写程序会出现乱码问题,在用Java程序读写含中文的文件时,经常会出现乱码问题。
这是因为系统的编码和程序的编码采用了不同的编码格式。通常,windows自身擦采用的编码格式是gbk,
而IDE中Encode默认是utf-8的编码,这就是为什么会出现乱码的原因。为了避免可能得中文乱码问题,
最好在文件读取和写入的时候显式指定编码格式。
读文件:
public static String readFile(String fileName){
String fileContent = null;
BufferedReader bufr = null;
try{
File f = new File(fileName);
InputStreamReader read = new InputStreamReader(new FileInputStream(f),"gbk");
bufr= new BufferedReader(read);
String line = null;
while ((line = bufr.readLine()) != null){
fileContent += line;
}
} catch (Exception e)
{
e.printStackTrace();
} finally{
read.close();
}
return fileContent;
}
写文件:
public static void writeFile(String fileName, String fileContent){
BufferedWriter bufw = null;
try{
File f = new File(fileName);
OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(f),"gbk");
bufw = new BufferedWriter(write);
bufw.write(fileContent);
} catch (Exception e)
{
e.printStackTrace();
} finally{
bufw.close();
}
}
解决乱码问题后,代码如下:
public class FileDemo {
public static void main(String[] args) {
BufferedReader bufr = null;
BufferedWriter bufw = null;
try {
FileInputStream in = new FileInputStream("E:/data/车站一次/阿坝藏族羌族自治州.csv");
InputStreamReader insr = new InputStreamReader(in, "gbk");
bufr = new BufferedReader(insr);
FileWriter fw = new FileWriter("E:/data/a.csv", true);
bufw = new BufferedWriter(fw);
String line = null;
while((line=bufr.readLine())!=null){
bufw.write(line);
bufw.newLine();
bufw.flush();
}
bufr.close();
bufw.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
这样就不会出现乱码问题。
Java底层代码实现单文件读取和写入(解决中文乱码问题)的更多相关文章
- Java底层代码实现多文件读取和写入
需求: "E:/data/"目录下有四个文件夹,如下: 每个文件夹下有几个.csv文件,如下: 将每个文件夹下的.csv文件合并成一个以该文件夹命名的.csv文件. 做法: 找到& ...
- Apache commons-io实现单文件读取和写入
Apache commons-io提供了很多类,这里只介绍FileUtils类. FileUtils类提供了一些操作文件对象的实用方法,包括文件的读取.写入.复制和比较等. 比如逐句读取和写入一个文件 ...
- 【C#】C#中使用GDAL3(二):Windows下读写Shape文件及超详细解决中文乱码问题
转载请注明原文地址:https://www.cnblogs.com/litou/p/15035790.html 本文为<C#中使用GDAL3>的第二篇,总目录地址:https://www. ...
- springboot项目中文件的下载(解决中文乱码问题)
最近使用springboot项目,一直以来文件都以英文格式存储,这次使用的是xls文件下载,文件名为中文的,特此记录下中文文件名的下载以及springboot中下载路径报错问题. 正文 在使用spri ...
- Java socket保存示例(不使用base64)解决中文乱码问题
MultiThreadServer.java package com.my.nubase64; import java.io.BufferedReader; import java.io.Buffer ...
- python文件读取和写入案例
python文件读取和写入案例 直接上代码吧 都是说明 百度上找了很多,最终得出思路 没有直接可以读取修改的扩展,只能先读取,然后复制一份,然后在复制出来的文件里面追加保存 然后删除读的那个,但是缺 ...
- cocos2d-x:读取指定文件夹下的文件名称+解决中文乱码(win32下有效)
援引:http://blog.csdn.net/zhanghefu/article/details/21284323 http://blog.csdn.net/cxf7394373/article/d ...
- HDFS数据流-剖析文件读取及写入
HDFS数据流-剖析文件读取及写入 文件读取 1. 客户端通过调用FileSystem对象的open方法来打开希望读取的文件,对于HDFS来说,这个对象是分布式文件系统的一个实例.2. Distrib ...
- java解压多目录Zip文件(解决中文乱码问题)--转载
原文地址:http://zhangyongbo.iteye.com/blog/1749439 import java.io.BufferedOutputStream; import java.io.F ...
随机推荐
- iPhone6 Plus、iPhone6、iPhone5S和之前版本真实分辨率
以前总是嘲笑Android手机屏幕分辨率大小不一,碎片化严重,如今iPhone6发布,让iPhone的分辨率一下子增加到了四种.我们先来制作一张表格来对比说明一下: 以前总是嘲笑Android手机屏幕 ...
- kthreadd-linux下2号进程
参考: 1. linux常见进程与内核线程 2. Linux下2号进程的kthreadd--Linux进程的管理与调度(七) 本文中代码内核版本:3.2.0 kthreadd:这种内核线程只有一个,它 ...
- EasyUI DataGrid 相同连续列合并
扩展方法:$.extend($.fn.datagrid.methods, { autoMergeCells: function(jq, fields) { return jq.each(functio ...
- struts.xml文件:
struts.xml文件中包含的配置信息,你将修改所采取的措施的开发.这个文件可以被用来覆盖默认设置的应用程序,例如struts.devMode=false和其他设置中定义的属性文件.这个文件可以创建 ...
- 视频采集接口camera link 在8148中的应用
(1)应用背景 (2)camera link 简介 (3)camera link 与8148 (4)camera link 应用实例 ---------------------author:pkf - ...
- PNP与NPN三极管
主要区别是电流流向和电压不同:PNP管子是发射极流入后从基极和集电极流出,NPN管子是基极和集电极流入从发射极流出.PNP管子工作在放大区时电压是,Ue>Ub>Uc,NPN管子工作在放大区 ...
- hadoop2.2集群部署教程连接
完全分布式部署:http://blog.csdn.net/licongcong_0224/article/details/12972889 伪分布式部署:http://www.kankanews.co ...
- day20常用模块
一.正则内容的补充 import re # ret = re.findall(r'www\.baidu\.com|www\.oldboy\.com','www.baidu.com') # # ret ...
- lumen 获得当前uri 如/xxx/{id}
因为想实现通过url判断是否有权限,所有需要拿到当前的route方法的name,如下 $api->get('role/grant/{id}', 'RoleController@getGrant' ...
- 图解Microsoft SQL Server——“远程过程调用失败 [0x800706be] 错误“。
今天在配置SqlServer启动参数时,发现"开始菜单"->“配置工具”->“SQL Server 配置管理器”中的“SQL Server 服务”一项,右边栏里显示的是 ...