日期:2014-05-20  浏览次数:20783 次

紧急求救!!怎样从一个文本文件里提取
写一个函数要求提取里面的制定章输出到一个文件里,我写了一下这个函数

import   java.io.*;
import   java.io.FileReader;
import   java.io.PushbackReader;
import   java.io.IOException;
import   java.lang.*;
import   java.io.*;
import   java.util.*;

class   chapitre{

public   static   String   skipblanks(String   s){   //此函数为了跳过空格

String   aux   =   " ";
for(int   i   =   0   ;   i <s.length();i++){
        if(s.charAt(i)!= '   '){
aux   =   aux   +   s.charAt(i);
        }
}
return   aux;
        }

public   static   void   chapter(String   name,   String   type   ){     //        
        String   s   =   " ";
        String   aux   ;
        String   nom   =   name+ "1 ";   //输出一个新文件名为   name1
        try{
FileReader   rf   =   new   FileReader(name);
BufferedReader   buf   =   new   BufferedReader(rf);
FileWriter   wf   =   new   FileWriter(nom);
BufferedWriter   buff   =   new   BufferedWriter(wf);
String   rs   ;
while((rs   =   buf.readLine())!=null){
        aux   =   skipblanks(rs);
        System.out.println(aux);
                          if(aux.equals(type)){                         //如果等于用户输入的章节,开始向新文件写内容直到遇到两个换行
while(!rs.equals( "\n\n ")){
                                            buff.write(rs);
                                            buff.newLine();
        }
}
                  buf.close();
buff.close();
        }
        catch(IOException   e){
System.out.println(e);
        }
  }

public   static   void   main(String   argv[]){
chapitre( "test ", "CHAPTER1 ");
        }
}


------解决方案--------------------
while(!rs.equals( "\n\n "))
这个好像有问题吧。你用readLine()读取,已经是相当于读一个“\n”了,不可能有再读到“\n\n”。
------解决方案--------------------
while后少一个大括号,提前关闭了流
正确如下:
try{
FileReader rf = new FileReader(name);
BufferedReader buf = new BufferedReader(rf);
FileWriter wf = new FileWriter(nom);
BufferedWriter buff = new BufferedWriter(wf);
String rs ;
while((rs = buf.readLine())!=null){
aux = skipblanks(rs);
System.out.println(aux);
if(aux.equals(type)){ //如果等于用户输入的章节,开始向新文件写内容直到遇到两个换行
while(!rs.equals( "\n\n ")){
buff.write(rs);
buff.newLine();