读取解决eclipse工程中中文乱码的一种方案

昨天因为svn更新时出错,导致了所有的包含中文的java文件出现乱码,用记事本读取中文显示正常,但用eclipse就显示错误,导致问题出现的原因是编码问题,于是写了一个java类,遍历文件夹里所有的java类,并且将其转换成utf-8编码。具体代码如下:


/**
 * 处理学习元乱码问题
 * 
 * @author 丁国柱  2012-11-22
 */
public class ParseFile2UFT8 {
	private static ArrayList<String> filelist = new ArrayList<String>();

	public static void main(String[] args) throws Exception {
		String filePath = "F:/program/Lcell/src";
		// getFiles(filePath);
		String fileName = "";
		List<String> fileList = getFiles(filePath);
		System.out.println("一共有" + fileList.size() + "个文件");
		for (int i = 0; i < fileList.size(); i++) {
			// convertFiles(fileList.get(i),);
			// System.out.println(fileList.get(i));
			// convertFiles(fileList.get(i).toString(),changeFilePath(fileList.get(i).toString()));
			fileName = fileList.get(i).toString();
			System.out.println("处理第" + i + 1 + "个文件:" + fileName);
			convertFiles(fileName, changeFilePath(fileName));

		}
		// System.out.println(changeFilePath("F:/program/Lcell/src/TestHellp.java"));

	}

	/*
	 * 通过递归得到某一路径下所有的目录及其文件
	 */
	static List<String> getFiles(String filePath) {
		File root = new File(filePath);
		File[] files = root.listFiles();
		for (File file : files) {
			if (file.isDirectory()) {
				/*
				 * 递归调用
				 */
				getFiles(file.getAbsolutePath());

			} else {
				// 只要后缀名为java的文件
				if (file.getAbsolutePath()
						.substring(file.getAbsolutePath().length() - 5,
								file.getAbsolutePath().length())
						.equals(".java")) {
					filelist.add(file.getAbsolutePath());
				}
			}
		}
		return filelist;
	}

	public static void convertFiles(String inputFilePath, String outputFilePath) {
		FileInputStream fis = null;
		FileOutputStream fos = null;
		try {
			fis = new FileInputStream(new File(inputFilePath));
			fos = new FileOutputStream(new File(outputFilePath));
			byte[] buffer = new byte[fis.available()];
			fis.read(buffer);

			String str = new String(buffer, "GBK");
			fos.write(str.getBytes("utf-8"));
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (fis != null) {
				try {
					fis.close();
				} catch (Exception e) {

				}
			}
			if (fos != null) {
				try {
					fos.close();
				} catch (Exception e) {
				}
			}
		}
	}

	/**
	 * 改变存储路径F:/program/Lcell/src/TestHellp.java
	 * ==>F:/program/Lcell/convert/TestHellp.java
	 * 
	 * @param filePath
	 * @return
	 */
	public static String changeFilePath(String filePath) {
		int index = filePath.lastIndexOf("\\src");
		String newFilePath = filePath.substring(0, index) + "_convert"
				+ filePath.substring(index, filePath.length());
		// if(File(newFilePath))
		File file = new File(newFilePath);
		if (!file.getParentFile().exists()) {
			System.out.println("目标文件所在路径不存在,准备创建:" + file.getParentFile()
					+ "目录");
			if (!file.getParentFile().mkdirs()) {
				System.out.println("创建目录文件所在的目录失败!");
			}
		}
		return newFilePath;
	}

	// 根据文件名判断是否utf-8编码
	public static boolean fileIsUTF8Encoding(FileInputStream in) {
		boolean isUtf8 = false;
		try {
			byte[] b = new byte[3];
			try {
				in.read(b);
				in.close();
				if (b[0] == -17 && b[1] == -69 && b[2] == -65) {
					// 是utf-8编码
					isUtf8 = true;
				}

			} catch (FileNotFoundException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return isUtf8;
	}

}

你可能感兴趣的:(java,eclipse,乱码)