更改 .java 文件的编码格式

杯具呀..eclipse的默认编码是GBK,俺作为新鸟,直接用了GBK,于是乎被责成把所有class换成utf-8编码...
于是乎,自然而然想到了俺的FileOperator Class,它有两个读写文件的方法,一个读,一个写.当然还是很智能滴可以指定编码滴...恩,好说,可以把项目底下所有的java class以gbk编码读出来,then用utf-8血淋淋地写回去...sai...
First,我先写遍历项目文件夹的方法吧...于是乎,它诞生鸟——
import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class Change {

	public static void main(String[] args) {
		getAllFiles(new File("D:\\EclipseProjects\\aaaaaaaaaaaa"));
	}

	// 遍历一个文件夹中的所有文件
	public static void getAllFiles(File folder) {
		if (!folder.isDirectory())
			return;
		List<File> files = new ArrayList<File>();
		getFile(files, folder);
		for (File f : files) {
			String context = FileOperater.readText(f, "gbk");
			FileOperater.writeText(f, context, "utf-8");
		}
	}

	private static void getFile(List<File> list, File folder) {
		File[] files = folder.listFiles();
		for (File f : files) {
			if (f.isDirectory()) {
				getFile(list, f);// 若目录,则迭代
			} else {
				if (f.getName().endsWith(".java")) {
					list.add(f);
				}
			}
		}
	}
}

我已经想写这个东西很久鸟...可以加到FileOperator里去鸟..But you see 那个 endsWith(".java")多么幼稚呀...怎么都该写个正则表达式是吧,But 以我之智商还是等看本正则式傻瓜书再说吧..
Okay,下一个,套用file operator吧——
	public static String readText(File file, String encoding) {
		String content = "";
		try {
			InputStreamReader pr = new InputStreamReader(new FileInputStream(
					file), encoding);
			BufferedReader reader = new BufferedReader(pr);
			String temp = null;
			while ((temp = reader.readLine()) != null) {
				content += temp;
			}
			reader.close();// 关闭
		} catch (Exception ex) {
			Logger.getLogger(FileOperater.class.getName()).log(Level.SEVERE,
					null, ex);
		}
		return content;
	}

恩,这只是个读取文件内容的方法,encoding当然采用gbk,说实话,我得到内容...哇塞,它居然忽略了所有的换行...sai...真是一坨啊...
Then, 只更新这一句吧, content += (temp + "\n");
好了,okay,但是,"\n"这个东西真恐怕被ubuntu用户骂呀...
于是乎,另一个readText方法诞生鸟——
	public static String readText(File file, String encoding) {
		String content = "";
		try {
			InputStreamReader ir = new InputStreamReader(new FileInputStream(
					file), encoding);
			int i = -1;
			while ((i = ir.read()) != -1) {
				content += (char) i;
			}
			ir.close();
		} catch (Exception ex) {
			Logger.getLogger(FileOperater.class.getName()).log(Level.SEVERE,
					null, ex);
		}
		return content;
	}

多NB呀...尤其是这样的写法
			int i = -1;
			while ((i = ir.read()) != -1) {
				content += (char) i;
			}

你可知,俺之前是这么写的——
			while(ir.read() != -1){
				content += (char)ir.read();
			}

可是,读取内容为"0123456789"时,却得到"13579"...这不是隔一个取一个么,"真智能"....
可见,NB写法好处多呀...千万表有要求写法简单明了的fandong(居然敏感词)组织鸟...
okay,这能满足你了吗,linuxer?...
Last,write吧——
	public static void writeText(File file, String text, String encoding) {
		try {
			// BufferedWriter writer = new BufferedWriter(new
			// java.io.OutputStreamWriter(new FileOutputStream(file)));
			// writer.write(text);//内容在这里
			// writer.close();//关闭
			OutputStreamWriter pw = new OutputStreamWriter(
					new FileOutputStream(file), encoding);
			pw.append(text);
			pw.close();
		} catch (Exception ex) {
			Logger.getLogger(FileOperater.class.getName()).log(Level.SEVERE,
					null, ex);
		}
	}

可表用注释里那个木encoding的方法呦...
That's all, thank you .....

你可能感兴趣的:(java,eclipse,正则表达式,ubuntu,F#)