2008-04-29
文件读写实例模板
关键字: java文件读写在公司经常做一些文件分析及修改的工具。大多数的同事用vb,也有人用perl。我刚开始也学着用vb和perl来做。后来做了几次后发现,对于文件操作和字符串匹配Java更有优势。perl的正则表达式是很强大,但是一般的应用根本用不着那么深的分析。而vb对于字符串的操作实在是不敢恭维。举个简单的例子,判断一个字符串是否包含一个子串。java中只需要
String s=“Hello,World”;
if(s.contains("llo")){}就可以了
而vb则需要先判断子串在全串中的位置,根据返回的值来判断是否包含。vb中连截取子串都感觉很繁琐。perl语言实在是太随心所欲了,好多的东西是用特定的符合来表示,极其考验我的记忆力。
下面写个简单的文件读写操作,算是我工作常用的一个模板。包括了文件过滤器,目录及文件的递归遍历,文件的读写操作和字符串的分析。没有好的例子,所以不用到正则表达式,其实Java中也有正则表达式匹配的内容。不过根据个人经验,String类的方法已经足够强大。文件读写用的是字符流(以前老搞不清楚字符流跟字节流到底指什么,工作后才恍然大悟)
程序从目录开始分析,通过文件过滤器把根目录中的文件(包括子目录)放入文件数组。如果是目录递归执行上一过程,文件则进行读取操作。
Java把目录也看做文件,可以用.isDirectory()方法来判断是否目录
import java.io.*;
class EFileFilter implements FileFilter{//一个文件过滤器
public boolean accept(File f){
if(!f.getName().endsWith(".java")){//这里设计过滤文件的规则
return true;
}
return false;
}
}
public class RFile {
public static void directory(File f){//目录分析操作
File[] fl=f.listFiles(new EFileFilter());//将目录中的文件用过滤器过滤后的文件赋给fl数组。
//File[] fl=f.listFiles();如果不带参数则把目录中的所有文件赋给fl文件数组。
for(int i=0;i<fl.length;i++){
if(fl[i].isDirectory()){//如果此文件是目录的话,递归调用directory()方法,使能够遍历
directory(fl[i]);//递归
}
else{
readFile(fl[i]);//进入单个文件的读写操作
}
}
}
public static void readFile(File f){//单个文件的读写操作
try{
StringBuffer stb=new StringBuffer();//相比String能提高较大的性能,这点在做Lucene时候体会较深
File newD=new File("d:\\new\\");//新文件存放的目录
if(!newD.isDirectory()){
newD.mkdirs();//如果目录不存在则创建
}
File newFile=new File(newD.getAbsoluteFile()+f.getName());//新文件
FileWriter fw=new FileWriter(newFile);//文件写字符流
BufferedReader br=new BufferedReader(new FileReader(f));//文件读字符流
String s;
while((s=br.readLine())!=null){
System.out.println(s);//打印文件的内容
if(bString(s)){//调用分析字符串的方法
stb.append(s);//如果满足条件则写到新文件中
}
}
fw.append(stb);
fw.close();//一定要记得关闭
}catch(Exception e){
e.printStackTrace();
}
}
public static boolean bString(String s){
//对于String,java有很多实用的方法,可以去查文档,下边注释掉的是我工作中经常用到的一些
/*if(s.startsWith("")||s.endsWith("")||s.contains("")||s.charAt(4)=='a'){
return true;
}*/
return true;
}
public static void main(String[] args) {
File fd=new File("d:\\");//定义要分析的目录
directory(fd);//从目录开始执行
}
}
评论
zwm512327
2008-04-30
谢谢上面朋友使我进步
icefire
2008-04-30
引用
fw.close();//一定要记得关闭
有异常时,也要关闭!应该在finally中!
naofantian
2008-04-30
不错……收藏了……







评论排行榜