先读取文件,把文件内容保存在String 或 byte[] 中,再把你要删除的内容找出来删掉,然后重新组合String 或 byte[] 。把原来的文件删除,新建同名文件,把内容写如即可。
解决方案 »
- windows7 64bit 操作系统如何安装myeclipse
- 页面刷新一就行增一条记录的问题
- 想用JSP开发一个冲值系统
- spring配置中的问题
- checkbox :已经把同一名称的chckebox的所有选择的值存入数据库,如何从库中取出值后,根据值把checkbox再复选?
- JSP连接数据库大全
- JSP调用session的问题?
- 求助:为何总是有java.io.IOException:Socket closed
- EL表达式可以使用indexof方法吗
- 页面开多了之后,长时间不用,再切换过去就会出现空白
- 看看我的中文转换!还是有问题!
- 请问高手哪里的resin这个插件下载呢?网址越详细越容易下载的给越多分!!!!
之后开始处理:
定义两个int:startDelete=-1,endDelete=-1
和一个表示数组行数的int:row
每一行row++,然后用java.util.StringTokenizer(好像是这样写)按空格分开把第一个值与002匹配,设置startDelete=row,然后再与003匹配,如果startDelete>0就设置endDelete=row
好了可以break了,用两个for(int i=0;i<startDelete;i++)和for(int i=endDelete;i<information.length;i++)就可以生成一个新数组写回文件就OK了。
这儿有一个临界值的问题,如果002下面是001(我是说数字)的话,这样就会出错.(你可以看看上面的例子)
我的方法是每遇到一个新的002就更新startDelete,然后再继续搜003,要么我先试试再回复
import java.util.*;
import java.io.*;public class deal
{
String[] information; //存放文件内容
int startDelete=-1,endDelete=-1,end; //startDelete是开始删除行,endDelete结束删除行,end是最后的endDelete
int row; //information的行数
int tempRow; //用于循环查找startDelete和endDelete
PrintWriter pw; //输出流 public deal(String filename,String outfile,String startString,String endString)
//filename,outfile是输入输出文件,startString,endString是你说的"002","003"
{
try{
File f=new File(filename);
BufferedReader br=new BufferedReader(new FileReader(f));
int row=0;
information=new String[(int)f.length()];
String s;
while((s=br.readLine())!=null)
information[row++]=s; //不解释了,就是把filename读入information
br.close();
pw=new PrintWriter(new FileOutputStream(outfile));
while(tempRow!=-1)
{
for (int i=tempRow;i<row;i++) //tempRow初始为0,用于记录前一次查找的最后一行
{
StringTokenizer st=new StringTokenizer(information[i]," "); //以" "隔开内容
if (st.hasMoreTokens())
{
String no=st.nextToken();
startDelete=(no.equals(startString))?(i):(startDelete); //找到开始行
endDelete=(no.equals(endString) && startDelete!=-1)?(i):(endDelete); //找到结束行,注意条件
if (endDelete!=-1) //找到一种情况
{
for (int j=tempRow;j<=startDelete;j++)
pw.println(information[j]); //写入
tempRow=endDelete; //tempRow设为最后一行
end=endDelete; //end设为最后一行
startDelete=-1; //重置开始和结束行
endDelete=-1;
break; //跳出循环,开始第二次匹配
}
}
if (i==row-1 && endDelete==-1) //查完了,结束while循环
tempRow=-1;
}
}
for (int j=end;j<row;j++) //把剩余的补上
pw.println(information[j]);
pw.flush(); //写文件
}catch(Exception e){System.out.println(e);}
}public static void main(String args[])
{
deal d=new deal(args[0],args[1],args[2],args[3]); //参数的作用见构造函数
}
}
用两次java deal in.txt out.txt 002 003
java deal out.txt out.txt 004 005
那out.txt就是你需要得到的文件
好像没出问题