有个log包,先想把里面的log.e过滤出来另存为一个文件。但是发现BufferedWriter达不到想要效果。比如log文件里面两行(如下)不能把另存到另外一个文件中:
E/Vold    (   96): Sleep 2s to make sure that coldboot() events are handled
E/WindowManager(  244): setEventDispatching false上代码:import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class LogSpider { /**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub

BufferedReader bufferedReader = null;

try {
bufferedReader = new BufferedReader(new FileReader("C:\\Users\\Administrator\\Desktop\\log.txt"));
String line = "";

try {
while((line = bufferedReader.readLine())!=null)
{
Parseelog(line);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
try {
bufferedReader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

public static void Parseelog(String line)
{
BufferedWriter bufferedWriter = null;
try {
bufferedWriter = new BufferedWriter(new FileWriter("C:\\Users\\Administrator\\Desktop\\logspider2.txt"));
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

//Pattern pattern = Pattern.compile("[\\w[.-]]+\\@[\\w[.-]]{2,}\\.[\\w[.-]]+");
Pattern pattern = Pattern.compile("^E.*");
Matcher matcher = pattern.matcher(line);

while(matcher.find())
{
String string = new String(matcher.group());
string += "\n";

System.out.println(string); //这里可以打印出查找结果

try {
bufferedWriter.write(string, 0, string.length());
bufferedWriter.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

finally{
try {
bufferedWriter.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}}

解决方案 »

  1.   

    你的问题是每次当你想写入匹配的行时,都得打开logspider2.txt文件,所以它重写了所以之前的数据。为姐姐这个问题,你需要在附加方式中打开你的文件。
    bufferedWriter = new BufferedWriter(
                        new FileWriter(
                                "F:\\praful\\androidworkspace_2\\Test\\src\\logspider2.txt",true));
    我试过你的代码,修改后可以正常运行,这是能运行的代码:
     /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub        BufferedReader bufferedReader = null;        try {
                bufferedReader = new BufferedReader(new FileReader(
                        "F:\\praful\\androidworkspace_2\\Test\\src\\logs.txt"));
                String line = "";            try {
                    while ((line = bufferedReader.readLine()) != null) {
                        Parseelog(line);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }        } catch (FileNotFoundException e) {
                e.printStackTrace();
            } finally {
                try {
                    bufferedReader.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }    public static void Parseelog(String line) {
            BufferedWriter bufferedWriter = null;
            // Pattern pattern =
            // Pattern.compile("[\\w[.-]]+\\@[\\w[.-]]{2,}\\.[\\w[.-]]+");
            Pattern pattern = Pattern.compile("^E.*");
            Matcher matcher = pattern.matcher(line);        try {
                bufferedWriter = new BufferedWriter(
                        new FileWriter(
                                "F:\\praful\\androidworkspace_2\\Test\\src\\logspider2.txt",true));            while (matcher.find()) {
                    String string = new String(matcher.group());
                    string += "\n";                System.out.println(string); // here can print the search results                bufferedWriter.write(string);            }            bufferedWriter.flush();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    bufferedWriter.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }    }}
    还要改本地路径中的文件路径。 希望能帮得上你。
      

  2.   

    谢谢,楼上。果然。
    另外:CSDN_Ask ? 专业ask团队?
      

  3.   

    CSDN Ask是关注于移动技术的问答平台,欢迎你去 ask.csdn.net 上提问。