java创建txt文件设置编码方式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java创建txt文件设置编码方式相关的知识,希望对你有一定的参考价值。
用eclipse生成txt文件的时候,生成的文件编码方式总是UTF-8,可不可以设置通过java,在创建文件的时候设置一下编码方式啊?
可以通过“FileOutputStream”(此时指定编码格式即可)创建文件实例,之后过“OutputStreamWriter”流的形式进行存储,举例:OutputStreamWriter pw = null;//定义一个流
pw = new OutputStreamWriter(new FileOutputStream(“D:/test.txt”),"GBK");//确认流的输出文件和编码格式,此过程创建了“test.txt”实例
pw.write("我是要写入到记事本文件的内容");//将要写入文件的内容,可以多次write
pw.close();//关闭流
备注:文件流用完之后必须及时通过close方法关闭,否则会一直处于打开状态,直至程序停止,增加系统负担。 参考技术A
// 说多了没用,给你个例子:
/**
* @param filePathAndName 含路径文件名
* @param fileContent 写入文件的字符串
*/
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);
writer.write(fileContent);
writer.close();
catch (Exception e)
System.out.println("写文件内容操作出错");
e.printStackTrace();
本回答被提问者和网友采纳 参考技术B 在写文件的时候可以设置编码格式! 参考技术C
window->preferences
java读取UTF-8的txt文件发现开头的一个字符问题
今天遇到一个奇葩问题,在读取一个TXT文件时,出现开头多了一个问号(?)。如下图:
莫名奇妙的多了一个。最后通过网上资料,知道在Java中,class文件采用utf8的编码方式,JVM运行时采用utf16。Java的字符串是永远都是unicode的,采用的是UTF-16的编码方式。
想测试一下,java对UTF-8文件的读写的能力,结果发现了一个很郁闷的问题,如果通过java写的UTF-8文件,使用Java可以正确的读,但是如果用记事本将相同的内容使用UTF-8格式保存,则在使用程序读取是会从文件中多读出一个不可见字符。
测试代码如下:
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.IOException;
- import java.io.InputStreamReader;
- public class UTF8Test {
- public static void main(String[] args) throws IOException {
- File f = new File("./utf.txt");
- FileInputStream in = new FileInputStream(f);
- // 指定读取文件时以UTF-8的格式读取
- BufferedReader br = new BufferedReader(new InputStreamReader(in, "UTF-8"));
- String line = br.readLine();
- while(line != null)
- {
- System.out.println(line);
- line = br.readLine();
- }
- }
- }
utf.txt通过记事本创建,另存时使用指定utf-8编码,其内容为:
This is the first line.
This is second line.
正常的测试结果应该是直接输出utf.txt的文本内容。可是实际上却输出了下面的内容:
?This is the first line.
This is second line.
第一行多出了一个问号。
通过上面的几篇文章应该可以想到是Java读取BOM(Byte Order Mark)的问题,在使用UTF-8时,可以在文件的开始使用3个字节的"EF BB BF"来标识文件使用了UTF-8的编码,当然也可以不用这个3个字节。
上面的问题应该就是因为对开头3个字节的读取导致的。开始不太相信这个是JDK的Bug,后来在多次试验后,问题依然存在,就又狗狗了一下,果然找到一个如下的Bug:
不过在我关掉的一些页面中记得有篇文件说这个bug只在jdk1.5及之前的版本才有,说是1.6已经解决了,从目前来看1.6只是解决了读取带有BOM文件失败的问题,还是不能区别处理有BOM和无BOM的UTF-8编码的文件,从Bug ID:4508058里的描述可以看出,这个问题将作为一个不会修改的问题关闭,对于BOM编码的识别将由应用程序自己来处理,原因可从另处一个bug处查看到,因为Unicode对于BOM的编码的规定可能发生变化。也就是说对于一个UTF-8的文件,应用程序需要知道这个文件有没有写BOM,然后自己决定处理BOM的方式。
解决办法:
1.保存时,选择
2.引用正确的读取类,比如我用的就是:org.apache.commons.io.FileUtils.readFileToString(new File(file), encoding);
ps:贴一下读取的工具类源码:
1 /** 2 * 读入文件到字串中 3 * 4 * @param file 需要读取的文件路径 5 * @return 读取的文件内容,若读入失败,则返回空字串 6 */ 7 public static String readFileToString(String file, String encoding) 8 { 9 try 10 { 11 if (StringHelper.isEmpty(encoding)) 12 { 13 encoding = "GBK"; 14 } 15 String content = org.apache.commons.io.FileUtils.readFileToString(new File(file), encoding); 16 return content; 17 } 18 catch (IOException ex) 19 { 20 logger.error("读取文件出错", ex); 21 } 22 return ""; 23 }
注意两点都要过一下,希望有用。
以上是关于java创建txt文件设置编码方式的主要内容,如果未能解决你的问题,请参考以下文章
Java IO读取txt文件乱码。前提不知道文档是啥编码格式