最近在做HTML静态生成,需要从硬盘上把模版文件的内容读出来。然后,替换相关标签写到指定的文件中。无论是读写,都遇到了中文乱码问题。试过多种方法,发现下面一种可以避免中文乱码。(无论读取还是写入一定要进行编码转换。)
1、JAVA读取文件,避免中文乱码。
/*** 读取文件内容** @param filePathAndName* String 如 c:\\1.txt 绝对路径* @return boolean*/ public static String readFile(String filePathAndName) {String fileContent = "";try { File f = new File(filePathAndName);if(f.isFile()&&f.exists()){InputStreamReader read = new InputStreamReader(new FileInputStream(f),"UTF-8");BufferedReader reader=new BufferedReader(read);String line;while ((line = reader.readLine()) != null) {fileContent += line;} read.close();}} catch (Exception e) {System.out.println("读取文件内容操作出错");e.printStackTrace();}return fileContent; }
2、JAVA写入文件,避免中文乱码。
public static void writeFile(String filePathAndName, String fileContent) {try {File f = new File(filePathAndName);if (!f.exists()) {f.createNewFile();}OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(f),"UTF-8");BufferedWriter writer=new BufferedWriter(write); //PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(filePathAndName)));//PrintWriter writer = new PrintWriter(new FileWriter(filePathAndName)); writer.write(fileContent);writer.close();} catch (Exception e) {System.out.println("写文件内容操作出错");e.printStackTrace();} }
若写入的时候用
1、PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(filePathAndName)));
2、PrintWriter writer = new PrintWriter(new FileWriter(filePathAndName));
都会出现错误,不行。
p.s. 我刚开始用上述方法的时候还是出先乱码,后来发现是因为我的html文件的编码方式是不是utf-8,改成utf-8即可。
查看一个文件的编码方式,一个简单的办法是:用记事本打开它,然后另存为一个副本文件,在“另存为”的页面下方,“保存”按钮前面,如下图所示,会出现原文件的编码方式。
如果不是UTF-8,把它改成UTF-8,保存即可。