解决思路,分两步:
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 -