0

ログパッケージがあります。log.eをフィルタリングして、別のファイルに保存したいと思います。しかし、BufferedWriterは期待される効果に到達できないことがわかりました。以下のログファイルの2行などは別のファイルを保存できません。

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); //here can print the search results 

            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();
                }
            }    
        }
    }

}
4

1 に答える 1

0

コードの問題は、一致する行を書き込むたびに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();
            }
        }

    }

}

ファイルパスをローカルパスに変更してください。お役に立てば幸いです。

于 2012-11-01T08:22:26.820 に答える