您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

Java读linux文件名乱码的解决办法

2024/3/24 3:56:10发布21次查看
java读linux系统文件文件名乱码的解决办法
1,问题描述
web应用想通过java读取linux系统文件显示到web页面上,结果中文文件名出现乱码?
问题场景描述:当用户通过浏览器访问tomcat服务器,请求查看某一路径下文件列表信息,tomcat的web应用调用getfilesbypath(string path)方法读取文件列表信息响应请求,页面中文文件名出现乱码。
推荐教程:《java学习》
代码如下:
文件类
import java.io.serializable;import java.util.date;public class fileinfo implements serializable{/*** */private static final long serialversionuid = 1l;string name;long size;date lastmodified;boolean dir;public string getname() {return name;}public void setname(string name) {this.name = name;}public long getsize() {return size;}public void setsize(long size) {this.size = size;}public date getlastmodified() {return lastmodified;}public void setlastmodified(date lastmodified) {this.lastmodified = lastmodified;}public boolean isdir() {return dir;}public void setdir(boolean dir) {this.dir = dir;}}
java代码如下:
/*** 根据path路径查找出该路径下可视文件列表* @param path* @return*/public list<fileinfo> getfilesbypath(string path){list<fileinfo> filelist = new arraylist<fileinfo>();file file = new file(path);/*** 查找可视文件列表*/file[] files = file.listfiles(new filefilter() {@overridepublic boolean accept(file f) {return !f.ishidden();//过滤隐藏文件}});/*** java文件类型转换为web显示文件类*/for (file f : files) {fileinfo fileinfo = new fileinfo();fileinfo.setname(f.getname());fileinfo.setsize(f.length());fileinfo.setlastmodified(new date(f.lastmodified())); fileinfo.setdir(f.isdirectory());}return filelist;}
当将读取文件信息显示到web页面上时,中文文件名出现乱码。
2,解决方案
web系统调用该方法读取文件列表后,中文命名的文件或文件夹显示为乱码。出现乱码往往都是数据流编码不一致导致的,检查数据流编码,首先查看tomcat服务器和页面显示编码都是utf-8编码,在查看linux系统编码为iso-8859-15,当然我们也知道java默认采用的是unicode编码,但这种默认unicode编码不是我们想要的utf-8编码,所以我们需要自己转码。
解决方案1:
将linux系统编码修改为utf-8,该方案比较简单,不过要求用户有系统root权限才可以修改。
解决方案2:
通过java程序转码,将系统编码转换为utf-8编码。
/*** 根据path路径查找出该路径下可视文件列表* @param path* @return*/public list<fileinfo> getfilesbypath(string path){//获取系统编码string encoding = system.getproperty("file.encoding");list<fileinfo> filelist = new arraylist<fileinfo>();file file = new file(path);/*** 查找可视文件*/file[] files = file.listfiles(new filefilter() {@overridepublic boolean accept(file f) {return !f.ishidden();}});/*** java文件类型转换为web显示文件类型*/for (file f : files) {fileinfo fileinfo = new fileinfo();try {//将系统编码encoding转换为utf-8编码fileinfo.setname(new string(f.getname().getbytes(encoding),"utf-8"));} catch (unsupportedencodingexception e) {e.printstacktrace();}fileinfo.setsize(f.length());fileinfo.setlastmodified(new date(f.lastmodified())); fileinfo.setdir(f.isdirectory());}return filelist;}
页面显示文件名正常,但path参数在遍历文件的时候中文出现了乱码,导致路径不存在。
解决方法是将path参数从utf-8转换为系统编码,再根据path去遍历文件。
/*** 根据path路径查找出该路径下可视文件列表* @param path* @return*/public list<fileinfo> getfilesbypath(string path) throws exception{//获取系统编码string encoding = system.getproperty("file.encoding");list<fileinfo> filelist = new arraylist<fileinfo>();try {//将path路径转码为系统编码file file = new file(new string(path.getbytes("utf-8"),encoding));//判断文件路径是否存在,是否有读权限,如不存在或者没有权限则抛出异常if(file.exists() && file.isdirectory() && file.canread()){/*** 查找可视文件*/file[] files = file.listfiles(new filefilter() {@overridepublic boolean accept(file f) {return !f.ishidden();}});/*** java文件类型转换为web显示文件类型*/for (file f : files) {fileinfo fileinfo = new fileinfo();//将系统编码encoding转换为utf-8编码fileinfo.setname(new string(f.getname().getbytes(encoding),"utf-8"));fileinfo.setsize(f.length());fileinfo.setlastmodified(new date(f.lastmodified()));fileinfo.setdir(f.isdirectory());}}else{throw new exception("paht:"+path+", exists:"+file.exists()+", canread:"+file.isdirectory());}} catch (unsupportedencodingexception e1) {e1.printstacktrace();}return filelist;}
这样就可以解决java读linux系统文件名乱码问题。。。
解决乱码问题就是从源头追溯的显示,一路纠结编码就这么简单。。。
以上就是java读linux文件名乱码的解决办法的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product