用户登录
用户注册

分享至

java读取word文件中文乱码

  • 作者: 非凡之享
  • 来源: 51数据库
  • 2020-06-05

1. java,为什么读取文本文件里面的汉字是乱码啊,怎么改啊

汉字的字符集不匹配,比如说用UTF-8字符集去解析GBK字符集的汉字就会变成乱码

这里不要用FileReader,这个类用的是默认字符集去读取文本,改用InputStreamReader,它的构造方法中能够指定字符集,让它作为BufferedReader的源,就不会乱码了

hcl=new BufferedReader(new InputStreamReader(new FileInputStream(wjlj

), "GBK"));

如果还是乱码,就把GBK改成UTF-8

2. java 读取文件乱码

这是因为两你写入文件时的编码和读取文件时的编码方式不一致导致的。

你写文件时,没有指定字符编码,但是你读取文件内容时,指定了是以UTF-8编码来读取的。

读写文件编码必须保持一致才能正确显示。

你可以在读取文件时,使用默认的编码进行读取:

InputStreamReader read = new InputStreamReader (new FileInputStream(file));

3. JAVA使用POI读写word 乱码

如何使用java、poi读写word文档??能不能将一个word的内容完全读过来,放到一个新生成的word文件中去,要求能将word中的表格、图片等保留,格式不变。

最好能给个例子?网上多是很早以前的那个解决方法如下:,只能读文本内容,且新生成的word文件打开时总是要提示选择编码,不太好用,希望能有新的解决方案??!!poi操作word1.1 添加poi支持:包下载地址1.2 poi对excel文件的读取操作比较方便,poi还提供对word的doc格式文件的读取。但在它的发行版本中没有发布对word支持的模块,需要另外下载一个poi的扩展的jar包。

下载地址为;下载extractors-0.4_zip这个文件2、提取doc文件内容 public static string readdoc(string doc) throws exception {// 创建输入流读取doc文件 fileinputstream in = new fileinputstream(new file(doc)); wordextractor extractor = null; string text = null;// 创建wordextractor extractor = new wordextractor();// 对doc文件进行提取 text = extractor.extracttext(in); return text; } public static void main(string[] args) { try{ string text = wordreader.readdoc("c:/test.doc"); system.out.println(text); }catch(exception e){ e.printstacktrace(); } }3、写入doc文档 import java.io.bytearrayinputstream; import java.io.fileoutputstream; import java.io.ioexception; import org.apache.poi.poifs.filesystem.directoryentry; import org.apache.poi.poifs.filesystem.documententry; import org.apache.poi.poifs.filesystem.poifsfilesystem; public class wordwriter { public static boolean writedoc(string path, string content) { boolean w = false; try { // byte b[] = content.getbytes("iso-8859-1"); byte b[] = content.getbytes(); bytearrayinputstream bais = new bytearrayinputstream(b); poifsfilesystem fs = new poifsfilesystem(); directoryentry directory = fs.getroot(); documententry de = directory.createdocument("worddocument", bais); fileoutputstream ostream = new fileoutputstream(path); fs.writefilesystem(ostream); bais.close(); ostream.close(); } catch (ioexception e) { e.printstacktrace(); } return w; } public static void main(string[] args) throws exception{ string wr=wordreader.readdoc("d:\\test.doc"); boolean b = writedoc("d:\\result.doc",wr);。

4. java读取文件乱码

那是你选中的文件内容字符编码与jvm缺省的文件编码不一致,如unix下jvm缺省文件编码一般为iso8859-1,而你的文件内容可能使用了GBK,可使用如下代码:

FileInputStream fis = new FileInputStream(Abs);

InputStreamReader isr = new InputStreamReader(fis, "GBK"); //GBK替换成你文件内容使用的编码

BufferedReader br = new BufferedReader(isr);

5. 如何解决Java IO读取文件中文乱码问题

/** * 读取文件内容 * * @param filePathAndName String 读取文件路径 * @return String 文件中的内容 */ 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写入文件,避免中文乱码。

/** * 写文件 * * @param filePathAndName String 写文件路径 * @param fileContent String 需要写入的内容 */ 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(); } }。

6. java 读取文件流乱码输出乱码

如果你全是中文的话,中文是两个字节,那么可以采用两个字节一起读,如果你中英文交叉的文本,那就不好办了,只能把文本一次性全都读进来再输出。

纯中文读取:

File f1 = new File ("a.txt");

FileInputStream is=new FileInputStream(f1);

int i;

byte[] b =new byte[2];

while((i=is.read(b))!=-1){

System.out.print(new String(b));

}

中英文混合的文本读取

byte[] b =new byte[yourtxtlength];

yourtxtlength就是你文本字节的长度

7. JAVA读写文件,如何避免中文乱码

最近在做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));

都不行。

以上代码经过运行可以避免中文乱码,关键是要编码转换。

8. JavaIO读取/写入文件中文乱码问题怎么办

读取: BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(File file), "UTF-8")); 写入: BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(File file), "UTF-8")); 不包BufferedWriter和BufferedReader一层,也可以达到解决中文乱码问题的目的。

参考下面J2SE6中关于 InputStreamReader 和 OutputStreamWriter 的解析 ************************************************************* public class OutputStreamWriterextends Writer OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。 它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。

每次调用 write() 方法都会导致在给定字符(或字符集)上调用编码转换器。在写入底层输出流之前,得到的这些字节将在缓冲区中累积。

可以指定此缓冲区的大小,不过,默认的缓冲区对多数用途来说已足够大。 注意,传递给 write() 方法的字符没有缓冲。

为了获得最高效率,可考虑将 OutputStreamWriter 包装到 BufferedWriter 中,以避免频繁调用转换器。例如: Writer out = new BufferedWriter(new OutputStreamWriter(System。

out)); 代理对 是一个字符,它由两个 char 值序列表示:高 代理项的范围为 '\uD800' 到 '\uDBFF',后跟范围为 '\uDC00' 到 '\uDFFF' 的低 代理项。 错误代理元素 指的是后面不跟低代理项的高代理项,或前面没有高代理项的低代理项。

此类总是使用字符集的默认替代序列 替代错误代理元素和不可映射的字符序列。如果需要更多地控制编码过程,则应该使用 CharsetEncoder 类。

******************************************************************* public class InputStreamReaderextends Reader InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。 它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。

每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。

为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader。例如: BufferedReader in = new BufferedReader(new InputStreamReader(System。

in));。

转载请注明出处51数据库 » java读取word文件中文乱码

软件
前端设计
程序设计
Java相关