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方法关闭,否则会一直处于打开状态,直至程序停止,增加系统负担。
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-06-18
解决JAVA读写文件在服务器显示乱码的办法:

    操作的文件的文件名里面禁止用中文,日本等文字。只能用英文,数值等。这种方法在很多项目中都是采用的这种方法。

    从本地上传文件到服务器的时候,就对文件名进行码制转换。比如本地是SHIFT—JIS,服务器是UTF-8。一般大多数服务器都是UTF-8。上传工具可以对文件名进行UTF-8转换。比如使用WINSCP软件,转换后的文件名由于是UTF-8,所以能正常显示。

JAVA读写服务器文件出现乱码的原因:
JAVA读取文件是会自动用当前JAVA环境的encode对文件名进行读取。如果JAVA环境的encode和服务器上的文件名的encode一致的话,就能够显示文件名。但是如果JAVA环境的encode和服务器上的文件名的encode不一致的话,就会出现乱码。
第2个回答  推荐于2018-03-10
一个是服务器的原因,比如你现在使用的是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[],你可以查一下。

本回答被提问者和网友采纳
第3个回答  2014-01-20
你的XML文件存储的时候是使用UTF-8么?即使你有encoding="UTF-8",如果直接存还是ASCII吧,可是你读的时候InputStreamReader isr = new InputStreamReader(fis, "UTF-8");使用了UTF-8读,所以乱码。追问

如果是这个问题,那怎么解决呢? 用ascii来读???

追答

是的,直接去掉InputStreamReader的"UTF-8"

第4个回答  2014-01-20
检查服务器配置 如果是web项目 本地测试是不是用servlet测的 否则检查servlet配置
相似回答