修改已创建的Java项目编码以及解决java文件中文乱码问题的解决方案

解决思路,分两步:

1,工具中修改项目编码为UTF-8,此步会导致src中存在中文的java文件乱码;

2,使用程序将src目录下的文件以GBK(你没改成UTF-8前的编码)编码读出来,然后再以UTF-8的方式写入进去;

 

解决步骤:

1,选中项目,右键召唤菜单,选择 Properties -> 左侧选择 Resource -> Text file encoding - > Other(选择UTF-8);

注意:修改完成后,会发现带有中文的java文件内的中文会乱码,属于正常现象;

 

 

2,GBK读,UTF-8写;

FileUtil.java

package file;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;

public class FileUtil {
	
	/**
	 * 创建文件并写入内容
	 * 
	 * @param path
	 *            文件路径,不包括文件名
	 * @param fileName
	 *            文件名,带后缀
	 * @param content
	 *            内容
	 * @param encode
	 *            写入时的编码
	 * @return
	 * @throws Exception
	 * @author by space 2018-2-27
	 */
	public static String write(String path, String fileName, String content, String encode) throws Exception {		
		
		if (isNull(path)) {
			System.out.println("Path is null");
			return "error";
		}
		
		Writer writer = null;
		
		try {
			
			File files = new File(path);
			if (!files.exists()) {
				files.mkdirs();
			}
			
			path += fileName;
			File file = new File(path);
			System.out.println(file.getPath());
			if (file.exists()) file.delete();
			file.createNewFile();
			
			writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), encode));  
			writer.write(content);
		}
		finally {
			if (writer != null) {
				writer.flush();
				writer.close();
			}
		}
		
		return "success";
	}
	
	/**
	 * 读取文件内容
	 * 
	 * @param file
	 *            目标文件对象
	 * @param encode
	 *            读取文件时使用的编码
	 * @return
	 * @throws Exception
	 * @author SPACE
	 * @date 2019年2月25日
	 */
	public static String readFile(File file, String encode) throws Exception {

		FileInputStream fis = null;
		StringBuilder content = new StringBuilder();
		InputStreamReader ir = null;

		try {
			fis = new FileInputStream(file);
			ir = new InputStreamReader(fis, encode);
			char[] tempbytes = new char[1024];
			int byteread = 0;
			while ((byteread = ir.read(tempbytes)) != -1) {
				content.append(new String(tempbytes, 0, byteread));
			}
		} 
		catch (Exception e) {
			e.printStackTrace();
			throw e;
		} 
		finally {
			if (fis != null) {
				try {
					fis.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (ir != null) {
				ir.close();
			}
		}

		return content.toString();
	}

	public static boolean isNull(String str) {
		return str == null || str.trim().length() == 0;
	}

}

程序入口:

package file;

import java.io.File;

public class Mains {
	
	static int fileCount = 0; 

	public static void main(String[] args) throws Exception {
		
		String path = "E:/Dev_project/XXX/src";
		readFiles(path);
		System.out.println("file count = " + fileCount);
		
	}

	static void readFiles(String path) throws Exception {

		File file = new File(path);

		File[] fileAry = file.listFiles();

		for (int i = 0; i < fileAry.length; i++) {

			File f = fileAry[i];

			if (f.isFile()) {

				if (!f.getName().contains(".")) {
					continue;
				}
				
				String suffix = f.getName().substring(f.getName().lastIndexOf("."));
				
				if (suffix.equals(".java")) {
					FileUtil.write(f.getParent() + "/", f.getName(), FileUtil.readFile(f, "GBK"), "UTF-8");
					System.out.println(f.getPath());
					fileCount++;
				}
				
			} 
			else if (f.isDirectory()) {
				readFiles(f.getPath());
			}

		}

	}

}

- END -

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值