注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天朝布衣田中码农参上

苦逼码农的点点滴滴,请多多指教!

 
 
 

日志

 
 
 
 

Java操作Txt文本文件的办法  

2017-10-14 07:52:42|  分类: JAVA |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
最近手头上有一个Java项目有需要需要上传文件,再根据用户名来创建相应的目录,但因为有些WEB容器对目录没有设置相应的权限,这样新创建的目录就有可能暴露出用户所上传的所有文件列表【即相关的新创建的用户目录下没有默认的index.html或index.htm】。虽然可以依靠Web配置文件来设置相应的权限,但是为了以防万一,还是在创建用户目录的时候,自动生成一个index.html或index.htm。这样就牵涉到了Java操作Txt文本文件的问题,所以以下这个例子虽然简单,但是觉得对于学习Java处理文本文件还是蛮有意义。
1)Java对Txt文本文件的写入方法,有两种:
a)利用FileOutputStream:

//写入TXT文件,使用FileOutputStream
public static boolean writeToTxtFile(String content,String fileName,String Encode)throws Exception{
boolean fileflag=false;
File file = new File(fileName);
FileOutputStream fos=null;
if(Encode==null)Encode="UTF-8"; //默认按UTF-8处理
try {
BufferedReader br=new BufferedReader(new FileReader(file));
String result="";
String read=null;
while((read=br.readLine())!=null)result+=read+"\r\n"; //按行读取
result+=content;//原有内容跟新加入内容拚合
//如果不需要以append的方式写入,请先注释以上行,再将下行修改为:new FileOutputStream(file).write(content.getBytes(Encode));
new FileOutputStream(file).write(result.getBytes(Encode));
fos.close();
fileflag=true;
} catch (Exception e) {
//异常,表明文件不可写
}finally{
if(fos!=null)fos.close();
}
return fileflag;
}

b)利用RandomAccessFile:

//写入TXT文件,使用RandomAccessFile办法
public static boolean writeToTxtFile(String content,String fileName,String Encode)throws Exception{
boolean fileflag=false;
RandomAccessFile raf=null;
if(Encode==null)Encode="UTF-8"; //默认按UTF-8处理
try {
raf=new RandomAccessFile(fileName, "rw");
long fileLength = raf.length();// 获取文件的长度即字节数
// 将写文件指针移到文件尾,如果不需要用append方式,可注释以下一行
raf.seek(fileLength);
raf.write(content.getBytes(Encode));
raf.close();
fileflag=true;
} catch (Exception e) {
//异常,表明文件不可写
}finally{
if(raf!=null)raf.close();
}
return fileflag;
}

调用方法都是一样,比如要生成相关用户目录的index.html,请使用如下代码:

writeToTxtFile("<meta http-equiv='refresh' content='0;url=../'>","/home/web/593668.com/admin/index.htm",null);

2)Java对Txt文本文件的读取方法,同样有两种: 
a)利用BufferedReader:

//读取TXT文件
public static String readFromTxtFile(String fileName) throws IOException{
File file = new File(fileName);
String result="";
BufferedReader br=null;
try{
br=new BufferedReader(new FileReader(file));
String read=null;
while((read=br.readLine())!=null)result+=read+"\r\n"; //按行读取
}finally{
//最后尝试关闭流
if(br!=null)br.close();
}
return result;
}

b)利用RandomAccessFile:

//读取TXT文件
public static String readFromTxtFile1(String fileName) throws IOException{
RandomAccessFile raf = new RandomAccessFile("fileName", "r");
String result="";
String read=null;
while((read=raf.readLine())!=null)result+=read+"\r\n"; //按行读取
return result;
}

以上方法仅限于操作Txt文本文件,如果是其它如二进制类型文件,就必须要相应的改写。当然利用好RandomAccessFile这个文件类的方法,无论是读取还是写入都是非常容易的事。代码示范:

//写入二进制方法
RandomAccessFile raf = new RandomAccessFile("123.txt", "rw");
raf.writeBoolean(true); //写Boolean
raf.writeInt(30); //写整形
raf.writeDouble(3.56); //写浮点
raf.seek(0);//设置指针的位置为文件的开始部分
//读取二进制方法,将相关的二进制全读入byte数组,以下代码仅为示范【一次性读入,小文件还可以,大文件必须分批读入】
byte[] bytes = new byte[(int) raf.length()];
for (int i=0; i<bytes.length; i++){
bytes[i] = raf.readByte();//每次读一个字节,并把它赋值给字节bytes[i]
System.out.println(bytes[i]);
}
raf.skipBytes(1);//指针跳过一个字节
raf.close();

希望以上的代码示范对大家的学习有帮助,如果有需要,大家也可以在此基础上扩展。比如,按相应的正则来读取文本文本中的一些指定类型,或者指定从那行开始读取几行数据,这里就不再多做述说了。
  评论这张
 
阅读(0)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018