zoukankan      html  css  js  c++  java
  • 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();
    		} 	
    	}
    }

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

  • 相关阅读:
    千峰公开课徐老师讲解前端前沿技术总结
    网站被k到可以使用关键词搜索到首页优化总结
    SEO基础内容
    react项目后台及上线步骤
    超好用的图片压缩工具,推荐给你
    属性title样式自定义
    Vue.js_devtools_5.1.0.zip【需要的可自行下载】
    js异步执行 按需加载 三种方式
    Web安全之跨站脚本攻击(XSS)
    操作数组不要只会for循环
  • 原文地址:https://www.cnblogs.com/weilunhui/p/3836564.html
Copyright © 2011-2022 走看看