java在java 读写linux文件下可以写文件,但不能读取

Java读linux系统文件文件名乱码 - Java - ITeye博客
博客分类:
1,问题描述
web应用想通过Java读取linux系统文件显示到web页面上,结果中文文件名出现乱码?
问题场景描述:当用户通过浏览器访问tomcat服务器,请求查看某一路径下文件列表信息,tomcat的web应用调用getFilesByPath(String path)方法读取文件列表信息响应请求,页面中文文件名出现乱码。
代码如下:
文件类
import java.io.S
import java.util.D
public class FileInfo implements Serializable{
private static final long serialVersionUID = 1L;
Date lastM
public String getName() {
public void setName(String name) {
this.name =
public long getSize() {
public void setSize(long size) {
this.size =
public Date getLastModified() {
return lastM
public void setLastModified(Date lastModified) {
this.lastModified = lastM
public boolean isDir() {
public void setDir(boolean dir) {
this.dir =
java代码如下:
&&&&&&& /**
* 根据path路径查找出该路径下可视文件列表
* @param path
public List&FileInfo& getFilesByPath(String path){
List&FileInfo& fileList = new ArrayList&FileInfo&();
File file = new File(path);
* 查找可视文件列表
File[] files = file.listFiles(new FileFilter() {
public 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 fileL
当将读取文件信息显示到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
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() {
public 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"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
fileInfo.setSize(f.length());
fileInfo.setLastModified(new Date(f.lastModified()));
fileInfo.setDir(f.isDirectory());
return fileL
页面显示文件名正常,但path参数在遍历文件的时候中文出现了乱码,导致路径不存在。
解决方法是将path参数从utf-8转换为系统编码,再根据path去遍历文件。
* 根据path路径查找出该路径下可视文件列表
* @param path
public List&FileInfo& getFilesByPath(String path) throws Exception{
//获取系统编码
String encoding = System.getProperty("file.encoding");
List&FileInfo& fileList = new ArrayList&FileInfo&();
//将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() {
public 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());
throw new Exception("Paht:"+path+", exists:"+file.exists()+", canRead:"+file.isDirectory());
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
return fileL
这样就可以解决java读linux系统文件名乱码问题。。。
解决乱码问题就是从源头追溯的显示,一路纠结编码就这么简单。。。
浏览: 151077 次
来自: 深圳
哈哈,马士兵老师也发现了。
能像CSRF攻击一样带个图就更棒了
df 写道在javascript中看到下面的 ...
在javascript中看到下面的语句 e.value = t ...
yzxqml 写道xmong 写道yzxqml 写道tomca ...新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
稍有积蓄, 积分 324, 距离下一级还需 176 积分
论坛徽章:0
java程序获取配置文件ini的路径。在windows下完全正确,但是将程序发布到linux系统上,提示找不到文件。打印出的日志发现绝对路径没有获得正确,最前面是/root/.................................。
有碰到过的么?
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
白手起家, 积分 138, 距离下一级还需 62 积分
论坛徽章:0
两个平台下的路径分格符不同,
在代码中用File.separator代替一下看怎么样。
稍有积蓄, 积分 324, 距离下一级还需 176 积分
论坛徽章:0
解决了,是程序代码问题,必须要到bin,目录下才能正常获取。如果采用绝对路径执行命令,就不能正常获取。Java读写文件笔记_Linux编程_Linux公社-Linux系统门户网站
你好,游客
Java读写文件笔记
来源:Linu社区&
作者:tivan
import&java.io.BufferedR &&
import&java.io.F &&
import&java.io.FileInputS &&
import&java.io.FileR &&
import&java.io.FileW &&
import&java.io.IOE &&
import&java.io.InputS &&
import&java.io.InputStreamR &&
import&java.io.RandomAccessF &&
import&java.io.R &&
import&java.io.StringW &&
import&java.io.W &&
public&class&IOHelper&{ &&
&&&&public&static&void&copy(Reader&in,&Writer&out)&throws&IOException&{ &&
&&&&&&&&int&c&=&-1; &&
&&&&&&&&while&((c&=&in.read())&!=&-1)&{ &&
&&&&&&&&&&&&out.write(c); &&
&&&&&&&&} &&
&&&&public&static&String&readFile(File&file)&throws&IOException&{ &&
&&&&&&&&Reader&in&=&new&FileReader(file); &&
&&&&&&&&StringWriter&out&=&new&StringWriter(); &&
&&&&&&&&copy(in,&out); &&
&&&&&&&&return&out.toString(); &&
&&&&public&static&void&saveFile(File&file,&String&content)&throws&IOException&{ &&
&&&&&&&&Writer&writer&=&new&FileWriter(file); &&
&&&&&&&&writer.write(content); &&
&&&&&&&&writer.close(); &&
&&&&public&static&void&readFileByBytes(String&fileName)&{ &&
&&&&&&&&File&file&=&new&File(fileName); &&
&&&&&&&&InputStream&in&=&null; &&
&&&&&&&&try&{ &&
&&&&&&&&&&&&System.out.println("以字节为单位读取文件内容,一次读一个字节:"); &&
&&&&&&&&&&&&&&
&&&&&&&&&&&&in&=&new&FileInputStream(file); &&
&&&&&&&&&&&&int& &&
&&&&&&&&&&&&while&((tempbyte&=&in.read())&!=&-1)&{ &&
&&&&&&&&&&&&&&&&System.out.write(tempbyte); &&
&&&&&&&&&&&&} &&
&&&&&&&&&&&&in.close(); &&
&&&&&&&&}&catch&(IOException&e)&{ &&
&&&&&&&&&&&&e.printStackTrace(); &&
&&&&&&&&&&&&return; &&
&&&&&&&&} &&
&&&&&&&&try&{ &&
&&&&&&&&&&&&System.out.println("以字节为单位读取文件内容,一次读多个字节:"); &&
&&&&&&&&&&&&&&
&&&&&&&&&&&&byte[]&tempbytes&=&new&byte[<FONT color=#c]; &&
&&&&&&&&&&&&int&byteread&=&0; &&
&&&&&&&&&&&&in&=&new&FileInputStream(fileName); &&
&&&&&&&&&&&&&&
&&&&&&&&&&&&while&((byteread&=&in.read(tempbytes))&!=&-1)&{ &&
&&&&&&&&&&&&&&&&System.out.write(tempbytes,&0,&byteread); &&
&&&&&&&&&&&&} &&
&&&&&&&&}&catch&(Exception&e1)&{ &&
&&&&&&&&&&&&e1.printStackTrace(); &&
&&&&&&&&}&finally&{ &&
&&&&&&&&&&&&if&(in&!=&null)&{ &&
&&&&&&&&&&&&&&&&try&{ &&
&&&&&&&&&&&&&&&&&&&&in.close(); &&
&&&&&&&&&&&&&&&&}&catch&(IOException&e1)&{ &&
&&&&&&&&&&&&&&&&} &&
&&&&&&&&&&&&} &&
&&&&&&&&} &&
&&&&public&static&void&readFileByChars(String&fileName)&{ &&
&&&&&&&&File&file&=&new&File(fileName); &&
&&&&&&&&Reader&reader&=&null; &&
&&&&&&&&try&{ &&
&&&&&&&&&&&&System.out.println("以字符为单位读取文件内容,一次读一个字节:"); &&
&&&&&&&&&&&&&&
&&&&&&&&&&&&reader&=&new&InputStreamReader(new&FileInputStream(file)); &&
&&&&&&&&&&&&int& &&
&&&&&&&&&&&&while&((tempchar&=&reader.read())&!=&-1)&{ &&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&if&(((char)&tempchar)&!=&'r')&{ &&
&&&&&&&&&&&&&&&&&&&&System.out.print((char)&tempchar); &&
&&&&&&&&&&&&&&&&} &&
&&&&&&&&&&&&} &&
&&&&&&&&&&&&reader.close(); &&
&&&&&&&&}&catch&(Exception&e)&{ &&
&&&&&&&&&&&&e.printStackTrace(); &&
&&&&&&&&} &&
&&&&&&&&try&{ &&
&&&&&&&&&&&&System.out.println("以字符为单位读取文件内容,一次读多个字节:"); &&
&&&&&&&&&&&&&&
&&&&&&&&&&&&char[]&tempchars&=&new&char[30]; &&
&&&&&&&&&&&&int&charread&=&0; &&
&&&&&&&&&&&&reader&=&new&InputStreamReader(new&FileInputStream(fileName)); &&
&&&&&&&&&&&&&&
&&&&&&&&&&&&while&((charread&=&reader.read(tempchars))&!=&-1)&{ &&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&if&((charread&==&tempchars.length) &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&(tempchars[tempchars.length&-&1]&!=&'r'))&{ &&
&&&&&&&&&&&&&&&&&&&&System.out.print(tempchars); &&
&&&&&&&&&&&&&&&&}&else&{ &&
&&&&&&&&&&&&&&&&&&&&for&(int&i&=&0;&i&&&&i++)&{ &&
&&&&&&&&&&&&&&&&&&&&&&&&if&(tempchars[i]&==&'r')&{ &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&continue; &&
&&&&&&&&&&&&&&&&&&&&&&&&}&else&{ &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&System.out.print(tempchars[i]); &&
&&&&&&&&&&&&&&&&&&&&&&&&} &&
&&&&&&&&&&&&&&&&&&&&} &&
&&&&&&&&&&&&&&&&} &&
&&&&&&&&&&&&} &&
&&&&&&&&}&catch&(Exception&e1)&{ &&
&&&&&&&&&&&&e1.printStackTrace(); &&
&&&&&&&&}&finally&{ &&
&&&&&&&&&&&&if&(reader&!=&null)&{ &&
&&&&&&&&&&&&&&&&try&{ &&
&&&&&&&&&&&&&&&&&&&&reader.close(); &&
&&&&&&&&&&&&&&&&}&catch&(IOException&e1)&{ &&
&&&&&&&&&&&&&&&&} &&
&&&&&&&&&&&&} &&
&&&&&&&&} &&
&&&&public&static&void&readFileByLines(String&fileName)&{ &&
&&&&&&&&File&file&=&new&File(fileName); &&
&&&&&&&&BufferedReader&reader&=&null; &&
&&&&&&&&try&{ &&
&&&&&&&&&&&&System.out.println("以行为单位读取文件内容,一次读一整行:"); &&
&&&&&&&&&&&&reader&=&new&BufferedReader(new&FileReader(file)); &&
&&&&&&&&&&&&String&tempString&=&null; &&
&&&&&&&&&&&&int&line&=&1; &&
&&&&&&&&&&&&&&
&&&&&&&&&&&&while&((tempString&=&reader.readLine())&!=&null)&{ &&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&System.out.println("line&"&+&line&+&":&"&+&tempString); &&
&&&&&&&&&&&&&&&&line++; &&
&&&&&&&&&&&&} &&
&&&&&&&&&&&&reader.close(); &&
&&&&&&&&}&catch&(IOException&e)&{ &&
&&&&&&&&&&&&e.printStackTrace(); &&
&&&&&&&&}&finally&{ &&
&&&&&&&&&&&&if&(reader&!=&null)&{ &&
&&&&&&&&&&&&&&&&try&{ &&
&&&&&&&&&&&&&&&&&&&&reader.close(); &&
&&&&&&&&&&&&&&&&}&catch&(IOException&e1)&{ &&
&&&&&&&&&&&&&&&&} &&
&&&&&&&&&&&&} &&
&&&&&&&&} &&
&&&&public&static&void&readFileByRandomAccess(String&fileName)&{ &&
&&&&&&&&RandomAccessFile&randomFile&=&null; &&
&&&&&&&&try&{ &&
&&&&&&&&&&&&System.out.println("随机读取一段文件内容:"); &&
&&&&&&&&&&&&&&
&&&&&&&&&&&&randomFile&=&new&RandomAccessFile(fileName,&"r"); &&
&&&&&&&&&&&&&&
&&&&&&&&&&&&long&fileLength&=&randomFile.length(); &&
&&&&&&&&&&&&&&
&&&&&&&&&&&&int&beginIndex&=&(fileLength&&&4)&?&4&:&0; &&
&&&&&&&&&&&&&&
&&&&&&&&&&&&randomFile.seek(beginIndex); &&
&&&&&&&&&&&&byte[]&bytes&=&new&byte[10]; &&
&&&&&&&&&&&&int&byteread&=&0; &&
&&&&&&&&&&&&&&
&&&&&&&&&&&&&&
&&&&&&&&&&&&while&((byteread&=&randomFile.read(bytes))&!=&-1)&{ &&
&&&&&&&&&&&&&&&&System.out.write(bytes,&0,&byteread); &&
&&&&&&&&&&&&} &&
&&&&&&&&}&catch&(IOException&e)&{ &&
&&&&&&&&&&&&e.printStackTrace(); &&
&&&&&&&&}&finally&{ &&
&&&&&&&&&&&&if&(randomFile&!=&null)&{ &&
&&&&&&&&&&&&&&&&try&{ &&
&&&&&&&&&&&&&&&&&&&&randomFile.close(); &&
&&&&&&&&&&&&&&&&}&catch&(IOException&e1)&{ &&
&&&&&&&&&&&&&&&&} &&
&&&&&&&&&&&&} &&
&&&&&&&&} &&
&&&&/** &&
&&&&&*&A方法追加文件:使用RandomAccessFile &&
&&&&&*& &&
&&&&&*&@param&fileName &&
&&&&&*&&&&&&&&&&&&文件名 &&
&&&&&*&@param&content &&
&&&&&*&&&&&&&&&&&&追加的内容 &&
&&&&&*/ &&
&&&&public&static&void&appendMethodA(String&fileName, &&
&&&&String&content)&{ &&
&&&&&&&&try&{ &&
&&&&&&&&&&&&&&
&&&&&&&&&&&&RandomAccessFile&randomFile&=&new&RandomAccessFile(fileName,&"rw"); &&
&&&&&&&&&&&&&&
&&&&&&&&&&&&long&fileLength&=&randomFile.length(); &&
&&&&&&&&&&&&&&
&&&&&&&&&&&&randomFile.seek(fileLength); &&
&&&&&&&&&&&&randomFile.writeBytes(content); &&
&&&&&&&&&&&&randomFile.close(); &&
&&&&&&&&}&catch&(IOException&e)&{ &&
&&&&&&&&&&&&e.printStackTrace(); &&
&&&&&&&&} &&
&&&&public&static&void&appendMethodB(String&fileName,&String&content)&{ &&
&&&&&&&&try&{ &&
&&&&&&&&&&&&&&
&&&&&&&&&&&&FileWriter&writer&=&new&FileWriter(fileName,&true); &&
&&&&&&&&&&&&writer.write(content); &&
&&&&&&&&&&&&writer.close(); &&
&&&&&&&&}&catch&(IOException&e)&{ &&
&&&&&&&&&&&&e.printStackTrace(); &&
&&&&&&&&} &&
相关资讯 & & &
& (11/30/:52)
& (07/08/:10)
& (04/22/:27)
& (11/21/:48)
& (05/21/:16)
& (07/09/:16)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款java写文件在windows下可以,部署到linux下后不行。该如何解决 - J2EE当前位置:& &&&java写文件在windows下可以,部署到linux下后不行。java写文件在windows下可以,部署到linux下后不行。该如何解决&&网友分享于:&&浏览:218次java写文件在windows下可以,部署到linux下后不行。一直在windows下编程,现在程序需要部署到linux下,其中有一个功能是写图片到本地,然后在页面显示图片,在windows下没问题,但是在linux下图片无法写,但是可以读,请问最可能是什么问题?权限?可我看管理员是用root权限部署的。------解决方案--------------------用root部署,不等于可以写啊,看看运行时是用什么用户,这个用户有没有对目录的写权限。
------解决方案--------------------ps -ef看一下是用哪个用户启动的服务吧。
------解决方案--------------------你最好看一下那个目录在你当前用户下是否具有写的权限,一般修改成777权限就可以了
------解决方案--------------------有人说是包重复了
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有}

我要回帖

更多关于 java读取linux文件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信