当前位置 : 主页 > 编程语言 > java >

文件名与文件内容的中文乱码问题

来源:互联网 收集:自由互联 发布时间:2021-06-28
生成一个中文名的文件(文件内容也是中文)保存到指定路径 import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.io.UnsupportedEncodingException;////获取当
生成一个中文名的文件(文件内容也是中文)保存到指定路径
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

////获取当前系统环境编码格式的属性属性(shell输出乱码 和 文件名乱码 与这个属性有关)
    
	/**
	 * static String charsetName = System.getProperty("sun.jnu.encoding");//文件名是否乱码 
     * static String encoding = System.getProperty("file.encoding");  //文件内容是否乱码 
	 * str = new String(str.getBytes(), charsetName);
	 * str = new String(str.getBytes(), encoding);
	 * str = new String(str.getBytes("utf-8"), charsetName);
	 */
public class Bianma {
	//获取当前系统环境编码格式的属性属性(shell输出乱码 和 文件名乱码 与这个属性有关)
    static String charsetName = System.getProperty("sun.jnu.encoding");//文件名是否乱码 
    static String encoding = System.getProperty("file.encoding");  //文件内容是否乱码 
    
    //获取系统默认文件编码(此属性与文件格式有关)
    //System.getProperty("file.encoding");
    
    
	/**
	 * 将字符串转换为当前系统的编码
	 *
	 * @param str 输入的字符串
	 * @return 当前系统编码的字符串
	 */
	public static String GetCurrentlyEncodedString(String str) {
	    try {
	        str = new String(str.getBytes(), encoding);
	    } catch (Exception e) {
	        e.printStackTrace();
	    }

	    return str;
	}

	/**
	 * 输出文件
	 *
	 * @param outputString 输出文件的写入内容
	 * @param outputFile 输出文件
	 * @return 成功与否
	 * */
	public static boolean writeFile(String outputString,File outputFile) {
		BufferedWriter bw = null;
		try {
			bw = new BufferedWriter(new FileWriter(outputFile));
			bw.write(new String(outputString.getBytes(), encoding));//文件内容中文不乱码
			//bw.write(outputString);
			return true;
		} catch (IOException e) {
			e.printStackTrace();
			return false;
		}finally {
			try {
				if(bw != null) {
					bw.close();
				}
			}catch(IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	public static void main(String[] args) throws UnsupportedEncodingException {
		System.out.println("charsetName="+charsetName);
		System.out.println("encoding="+encoding);

		    
		String filenameLinux = "/home/weblogic/lbz/ly/文件啊我的.txt";//文件名
		String filenameWindows = "C:\\Local\\bak/文件啊我的.txt";//文件名
		String filestr = "我不要乱码";//文件内容
		System.out.println(GetCurrentlyEncodedString("1=1=1=1我不要乱码"));

		
		File outputfile = new File(new String(filenameLinux.getBytes("GBK"), charsetName));
		writeFile(filestr, outputfile);
	}
	
}
Bianma.java
package com.dmt;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

public class Bianma {
	//获取当前系统环境编码格式的属性属性(shell输出乱码 和 文件名乱码 与这个属性有关)
    static String charsetName = System.getProperty("sun.jnu.encoding");//文件名是否乱码 
    static String encoding = System.getProperty("file.encoding");  //文件内容是否乱码 
    
    //获取系统默认文件编码(此属性与文件格式有关)
    //System.getProperty("file.encoding");
    
    
	/**
	 * 将字符串转换为当前系统的编码
	 *
	 * @param str 输入的字符串
	 * @return 当前系统编码的字符串
	 */
	public static String GetCurrentlyEncodedString(String str) {
	    try {
	        str = new String(str.getBytes(), encoding);
	    } catch (Exception e) {
	        e.printStackTrace();
	    }

	    return str;
	}

	/**
	 * 输出文件
	 *
	 * @param outputString 输出文件的写入内容
	 * @param outputFile 输出文件
	 * @return 成功与否
	 * */
	public static boolean writeFile(String outputString,File outputFile) {
		BufferedWriter bw = null;
		try {
			bw = new BufferedWriter(new FileWriter(outputFile));
			bw.write(new String(outputString.getBytes(), encoding));//文件内容中文不乱码
			//bw.write(outputString);
			return true;
		} catch (IOException e) {
			e.printStackTrace();
			return false;
		}finally {
			try {
				if(bw != null) {
					bw.close();
				}
			}catch(IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	public static void main(String[] args) throws UnsupportedEncodingException {
		System.out.println("charsetName="+charsetName);
		System.out.println("encoding="+encoding);

		    
		String filenameLinux = "/home/weblogic/lbz/ly/文件啊我的.txt";//文件名
		String filenameWindows = "C:\\Local\\bak/文件啊我的.txt";//文件名
		String filestr = "我不要乱码";//文件内容
		System.out.println(GetCurrentlyEncodedString("1=1=1=1我不要乱码"));

		
		File outputfile = new File(new String(filenameLinux.getBytes("GBK"), charsetName));
		writeFile(filestr, outputfile);
	}
	
}
网友评论