需求

将"E:/data/车站一次/阿坝藏族羌族自治州.csv"文件中的内容读取,写入到"E:/data//车站一次.csv"。

代码

  1. public class FileOpe {
  2. public static void main(String[] args) {
  3. sigle();
  4. }
  5. public static void sigle(){
  6. BufferedReader bufr = null;
  7. BufferedWriter bufw = null;
  8. try {
  9. FileReader fr = new FileReader( "E:/data/车站一次/阿坝藏族羌族自治州.csv");
  10. bufr = new BufferedReader(fr);
  11. FileWriter fw = new FileWriter( "E:/data//车站一次.csv",true);
  12. bufw = new BufferedWriter(fw);
  13. String line = null;
  14. while((line=bufr.readLine())!=null){
  15. bufw.write(line);
  16. bufw.newLine();
  17. bufw.flush();
  18. }
  19. } catch (FileNotFoundException e) {
  20. e.printStackTrace();
  21. } catch (IOException e) {
  22. e.printStackTrace();
  23. } finally{
  24. try {
  25. if(bufr!=null)
  26. bufr.close();
  27. if(bufw!=null)
  28. bufw.close();
  29. } catch (IOException e) {
  30. e.printStackTrace();
  31. }
  32. }
  33. }
  34. }

但是,这样写程序会出现乱码问题,在用Java程序读写含中文的文件时,经常会出现乱码问题。

这是因为系统的编码和程序的编码采用了不同的编码格式。通常,windows自身擦采用的编码格式是gbk,

而IDE中Encode默认是utf-8的编码,这就是为什么会出现乱码的原因。为了避免可能得中文乱码问题,

最好在文件读取和写入的时候显式指定编码格式。

读文件

  1. public static String readFile(String fileName){
  2. String fileContent = null;
  3. BufferedReader bufr = null;
  4. try{
  5. File f = new File(fileName);
  6. InputStreamReader read = new InputStreamReader(new FileInputStream(f),"gbk");
  7. bufr= new BufferedReader(read);
  8. String line = null;
  9. while ((line = bufr.readLine()) != null){
  10. fileContent += line;
  11. }
  12. } catch (Exception e)
  13. {
  14. e.printStackTrace();
  15. } finally{
  16. read.close();
  17. }
  18. return fileContent;
  19. }

写文件

  1. public static void writeFile(String fileName, String fileContent){
  2. BufferedWriter bufw = null;
  3. try{
  4. File f = new File(fileName);
  5. OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(f),"gbk");
  6. bufw = new BufferedWriter(write);
  7. bufw.write(fileContent);
  8. } catch (Exception e)
  9. {
  10. e.printStackTrace();
  11. } finally{
  12. bufw.close();
  13. }
  14. }

解决乱码问题后,代码如下

  1. public class FileDemo {
  2. public static void main(String[] args) {
  3. BufferedReader bufr = null;
  4. BufferedWriter bufw = null;
  5. try {
  6. FileInputStream in = new FileInputStream("E:/data/车站一次/阿坝藏族羌族自治州.csv");
  7. InputStreamReader insr = new InputStreamReader(in, "gbk");
  8. bufr = new BufferedReader(insr);
  9. FileWriter fw = new FileWriter("E:/data/a.csv", true);
  10. bufw = new BufferedWriter(fw);
  11. String line = null;
  12. while((line=bufr.readLine())!=null){
  13. bufw.write(line);
  14. bufw.newLine();
  15. bufw.flush();
  16. }
  17. bufr.close();
  18. bufw.close();
  19. } catch (FileNotFoundException e) {
  20. e.printStackTrace();
  21. } catch (IOException e) {
  22. e.printStackTrace();
  23. }
  24. }
  25. }

这样就不会出现乱码问题。

Java底层代码实现单文件读取和写入(解决中文乱码问题)的更多相关文章

  1. Java底层代码实现多文件读取和写入

    需求: "E:/data/"目录下有四个文件夹,如下: 每个文件夹下有几个.csv文件,如下: 将每个文件夹下的.csv文件合并成一个以该文件夹命名的.csv文件. 做法: 找到& ...

  2. Apache commons-io实现单文件读取和写入

    Apache commons-io提供了很多类,这里只介绍FileUtils类. FileUtils类提供了一些操作文件对象的实用方法,包括文件的读取.写入.复制和比较等. 比如逐句读取和写入一个文件 ...

  3. 【C#】C#中使用GDAL3(二):Windows下读写Shape文件及超详细解决中文乱码问题

    转载请注明原文地址:https://www.cnblogs.com/litou/p/15035790.html 本文为<C#中使用GDAL3>的第二篇,总目录地址:https://www. ...

  4. springboot项目中文件的下载(解决中文乱码问题)

    最近使用springboot项目,一直以来文件都以英文格式存储,这次使用的是xls文件下载,文件名为中文的,特此记录下中文文件名的下载以及springboot中下载路径报错问题. 正文 在使用spri ...

  5. Java socket保存示例(不使用base64)解决中文乱码问题

    MultiThreadServer.java package com.my.nubase64; import java.io.BufferedReader; import java.io.Buffer ...

  6. python文件读取和写入案例

    python文件读取和写入案例  直接上代码吧 都是说明 百度上找了很多,最终得出思路 没有直接可以读取修改的扩展,只能先读取,然后复制一份,然后在复制出来的文件里面追加保存 然后删除读的那个,但是缺 ...

  7. cocos2d-x:读取指定文件夹下的文件名称+解决中文乱码(win32下有效)

    援引:http://blog.csdn.net/zhanghefu/article/details/21284323 http://blog.csdn.net/cxf7394373/article/d ...

  8. HDFS数据流-剖析文件读取及写入

    HDFS数据流-剖析文件读取及写入 文件读取 1. 客户端通过调用FileSystem对象的open方法来打开希望读取的文件,对于HDFS来说,这个对象是分布式文件系统的一个实例.2. Distrib ...

  9. java解压多目录Zip文件(解决中文乱码问题)--转载

    原文地址:http://zhangyongbo.iteye.com/blog/1749439 import java.io.BufferedOutputStream; import java.io.F ...

随机推荐

  1. centos IP 配置 和 克隆的centos解决上网问题

    1. vi /etc/sysconfig/network-scripts/ifcfg-eth0 2. DEVICE=eth1HWADDR=00:0C:29:D2:9A:F5TYPE=EthernetU ...

  2. Jenkins构建脚本中启动tomcat关键

    一.启动tomcat 来源: http://blog.csdn.net/prisonbreak_/article/details/50749576(给出方法) http://veryyoung.me/ ...

  3. 介绍两款Linux文件恢复工具,ext3grep与extundelete https://www.cnblogs.com/lazyfang/p/7699994.html

    介绍两款Linux文件恢复工具,ext3grep与extundelete,可能在关键时刻会有所帮助.ext3grep仅对ext3文件系统有效,extundelete对ext3与ext4文件系统都有效  ...

  4. vSphere ESXi主机配置iSCSI存储

    vSphere ESXi主机配置iSCSI存储 vSphere ESXi主机一般连接的存储类型有光纤存储.iSCSI存储两类.本次案例为iSCSI存储连接ESXi主机的配置. 案例环境:ESXi主机通 ...

  5. 获取jsapi_ticket

    String accessTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&a ...

  6. Servlet 发送电子邮件

    使用 Servlet 发送一封电子邮件是很简单的,但首先您必须在您的计算机上安装 JavaMail API 和 Java Activation Framework)JAF). 您可以从 Java 网站 ...

  7. 操作XML-dom4j

    首先是到dom4j的官网dom4j文件包,下载之后解压如下所示. 在根目录中,找到dom4j-1.6.1jar包,加入到eclipse中的lib文件下,最后build path一下,即可使用相关的方法 ...

  8. 第二章----python基础

    概要:python是一种计算机编程语言,有自己的一套语法,编译器或者解释器负责把符合语法的程序代码翻译成CPU能识别的机器码,然后执行.python使用缩进来组织代码块,Python程序中大小写是敏感 ...

  9. thinkPHP3.2.2中支持的URL的四种模式

  10. 巨蟒django之CRM5 学习记录&&课程记录&&班级管理&&私户的数量上限

    1.公户变私户(事务+行级锁) 2.私户的数量上限 3.班级的管理 4.课程记录管理 5.学习记录的初始化 6.展示和编辑学习记录