java读写文件,在服务器显示乱码问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java读写文件,在服务器显示乱码问题相关的知识,希望对你有一定的参考价值。
用java读写xml文件的时候,在本机测试都是正常的,但是放在服务器上测试第一次一般都是正常的,数据设什么的打印出来也是ok的,但是第二次运行就基本都是乱码了,我的代码如下,请大侠救我。。。
package com.dingdong.test;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test
public static void main(String[] args) throws Exception
File file = new File("F:\\stream.xml");
StringBuffer filecontent = new StringBuffer();
FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
BufferedReader reader = new BufferedReader(isr);
String[] objectlists = null;
String tempstring="";
String line = "";// 用来保存每次读取一行的内容
while ((line = reader.readLine()) != null)
System.out.println(line.trim());
filecontent.append(line.trim()+"\n");
if(filecontent.toString().contains("</Objects>"))
objectlists = filecontent.toString().split("</Objects>");
else if(filecontent.toString().contains("</Measurements>"))
objectlists = filecontent.toString().split("</Measurements>");
else
System.out.println("没找到正确的标签!!");
File filepath = new File("F:\\a.xml");
String targetfilename = "";
System.out.println(objectlists.length);
FileOutputStream fos = null;
OutputStreamWriter osw =null;
BufferedWriter bw = null;
if(objectlists.length>0)
for(String str:objectlists)
Pattern linePattern = Pattern.compile("<ObjectType>(\\S+)</ObjectType>");
Matcher matcher = linePattern.matcher(str);
if(matcher.find())
System.out.println("找到了");
System.out.println(str);
targetfilename = matcher.group(1);
File targetfile = new File("/"+filepath + targetfilename + ".xml");
if(targetfile.createNewFile()== true)
fos = new FileOutputStream(targetfile);
osw = new OutputStreamWriter(fos,"UTF-8");
bw = new BufferedWriter(osw);
bw.write(str);
bw.flush();
bw.close();
我把项目改成UTF-8,我把服务器的显示改成UTF-8,关键是我的xml文件里面根本就没有中文,我都不知道是怎么乱码的。。。XML文件如下:<?xml version="1.0" encoding="UTF-8"?><PmFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="PmFileFormat.xsd"> <FileHeader> <InfoModelReferenced>CMCC-HSS-PM-V1.2.0</InfoModelReferenced> <EndTime>2014-01-19T11:00:00+08:00</EndTime> </FileHeader> <Measurements> <ObjectType>EthernetPort</ObjectType> </Measurements></PmFile>
这个不是web项目,是一个java项目。。。。。。。。
可以通过“FileOutputStream”创建文件实例,之后过“OutputStreamWriter”流的形式进行存储,举例:
OutputStreamWriter pw = null;//定义一个流
pw = new OutputStreamWriter(new FileOutputStream(“D:/test.txt”),"UTF-8");//确认流的输出文件和编码格式,此过程创建了“test.txt”实例
pw.write("我是要写入到记事本文件的内容");//将要写入文件的内容,可以多次write
pw.close();//关闭流
备注:文件流用完之后必须及时通过close方法关闭,否则会一直处于打开状态,直至程序停止,增加系统负担。 参考技术A 解决JAVA读写文件在服务器显示乱码的办法:
操作的文件的文件名里面禁止用中文,日本等文字。只能用英文,数值等。这种方法在很多项目中都是采用的这种方法。
从本地上传文件到服务器的时候,就对文件名进行码制转换。比如本地是SHIFT—JIS,服务器是UTF-8。一般大多数服务器都是UTF-8。上传工具可以对文件名进行UTF-8转换。比如使用WINSCP软件,转换后的文件名由于是UTF-8,所以能正常显示。
JAVA读取文件是会自动用当前JAVA环境的encode对文件名进行读取。如果JAVA环境的encode和服务器上的文件名的encode一致的话,就能够显示文件名。但是如果JAVA环境的encode和服务器上的文件名的encode不一致的话,就会出现乱码。 参考技术B 一个是服务器的原因,比如你现在使用的是tomcat,tomcat的conf目录中的server.xml文件中的Connector 中就应该指定URIEncoding="UTF-8" 如下:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"
redirectPort="8443" acceptCount="100" maxSpareThreads="75"
debug="0"
enableLookups="false"
disableUploadTimeout="true" useBodyEncodingForURI="true" URIEncoding="UTF-8"/>追问
不是tomcat,是sun的服务器,而且我已经改了服务器为UTF-8了。。。不是jsp显示什么中文乱码的问题。。
追答那就把你的编译器的encoding更改为utf-8啊
追问你看了代码么。。我能改的地方都改成utf-8了。。。。。。
追答一般处理乱码的问题是用byte[],你可以查一下。
本回答被提问者和网友采纳 参考技术C 你的XML文件存储的时候是使用UTF-8么?即使你有encoding="UTF-8",如果直接存还是ASCII吧,可是你读的时候InputStreamReader isr = new InputStreamReader(fis, "UTF-8");使用了UTF-8读,所以乱码。追问如果是这个问题,那怎么解决呢? 用ascii来读???
追答是的,直接去掉InputStreamReader的"UTF-8"
参考技术D 检查服务器配置 如果是web项目 本地测试是不是用servlet测的 否则检查servlet配置RandomAccessFile 文件读写中文乱码解决方案!
RandomAccessFile 读写文件时,不管文件中保存的数据编码格式是什么 使用 RandomAccessFile对象方法的 readLine() 都会将编码格式转换成 ISO-8859-1 所以 输出显示是还要在进行一次转码
例子:
package fileReadAndWrite; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; /** * 测试文件读写 * @author laobiao * */ public class bigFileRW { public static void main(String[] args) throws Exception { RandomAccessFile ra = new RandomAccessFile("test.txt", "rw"); ra.seek(0); ra.write("a bcd你好啊的撒法".getBytes()); ra.seek(0); System.out.println(new String(ra.readLine().getBytes("ISO-8859-1"),"utf-8"));//需要重新转码才能正常显示 ra.close(); } }
以上是关于java读写文件,在服务器显示乱码问题的主要内容,如果未能解决你的问题,请参考以下文章
Java中用FileInputStream和FileOutputStream读写txt文件,文件内容乱码的问题,另附循环代码小错误