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 ...
随机推荐
- centos IP 配置 和 克隆的centos解决上网问题
1. vi /etc/sysconfig/network-scripts/ifcfg-eth0 2. DEVICE=eth1HWADDR=00:0C:29:D2:9A:F5TYPE=EthernetU ...
- Jenkins构建脚本中启动tomcat关键
一.启动tomcat 来源: http://blog.csdn.net/prisonbreak_/article/details/50749576(给出方法) http://veryyoung.me/ ...
- 介绍两款Linux文件恢复工具,ext3grep与extundelete https://www.cnblogs.com/lazyfang/p/7699994.html
介绍两款Linux文件恢复工具,ext3grep与extundelete,可能在关键时刻会有所帮助.ext3grep仅对ext3文件系统有效,extundelete对ext3与ext4文件系统都有效 ...
- vSphere ESXi主机配置iSCSI存储
vSphere ESXi主机配置iSCSI存储 vSphere ESXi主机一般连接的存储类型有光纤存储.iSCSI存储两类.本次案例为iSCSI存储连接ESXi主机的配置. 案例环境:ESXi主机通 ...
- 获取jsapi_ticket
String accessTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&a ...
- Servlet 发送电子邮件
使用 Servlet 发送一封电子邮件是很简单的,但首先您必须在您的计算机上安装 JavaMail API 和 Java Activation Framework)JAF). 您可以从 Java 网站 ...
- 操作XML-dom4j
首先是到dom4j的官网dom4j文件包,下载之后解压如下所示. 在根目录中,找到dom4j-1.6.1jar包,加入到eclipse中的lib文件下,最后build path一下,即可使用相关的方法 ...
- 第二章----python基础
概要:python是一种计算机编程语言,有自己的一套语法,编译器或者解释器负责把符合语法的程序代码翻译成CPU能识别的机器码,然后执行.python使用缩进来组织代码块,Python程序中大小写是敏感 ...
- thinkPHP3.2.2中支持的URL的四种模式
- 巨蟒django之CRM5 学习记录&&课程记录&&班级管理&&私户的数量上限
1.公户变私户(事务+行级锁) 2.私户的数量上限 3.班级的管理 4.课程记录管理 5.学习记录的初始化 6.展示和编辑学习记录