Как использовать регулярное выражение для разбора текстового файла и записи результата в другой файл в Java - PullRequest
0 голосов
/ 27 октября 2018

Я использовал регулярное выражение для разбора текстового файла, чтобы использовать результирующую группу один и два следующим образом:

  • записать группу два в другой файл
  • сделать ее имя таким, чтобы оно былопервая группа

К сожалению, в файл не записано никаких данных!Я не понял, в чем проблема, вот мой код:

package javaapplication5;

import java.io.*;

import java.util.regex.*;

   public class JavaApplication5 {

    public static void main(String[] args) {
        // TODO code application logic here


          try {
            FileInputStream fstream = new FileInputStream("C:/Users/Welcome/Desktop/End-End-Delay.txt");
            DataInputStream in = new DataInputStream(fstream);
            BufferedReader br = new BufferedReader(new InputStreamReader(in));

            File newFile1= new File("C:/Users/Welcome/Desktop/AUV1.txt");

            FileOutputStream fos1= new FileOutputStream(newFile1);
            BufferedWriter bw1= new BufferedWriter(new OutputStreamWriter(fos1));


            String strLine;

            while ((strLine = br.readLine()) != null) {

                    Pattern p = Pattern.compile("sender\\sid:\\s(\\d+).*?End-End\\sDelay:(\\d+(?:\\.\\d+)?)");
                    Matcher m = p.matcher(strLine);

                    while (m.find()) {

                        String b = m.group(1);
                        String c = m.group(2);

                         int i = Integer.valueOf(b);
                         if(i==0){

                         System.out.println(b);

                         bw1.write(c);

                        bw1.newLine();

                         }

                        System.out.println(b);
                       // System.out.println(c);


                    }

            }
        } 
            catch (Exception e) {
            System.err.println("Error: " + e.getMessage());
        }




    }

}

Может кто-нибудь здесь помочь мне решить эту проблему и определить ее?

1 Ответ

0 голосов
/ 27 октября 2018

Вы используете BufferedWriter и никогда не сбрасываете (программа записи при сбрасывании выталкивает содержимое на диск) ваш писатель или даже закрываете его в конце вашей программы.

Из-за этого, прежде чем ваш контент будет записан в фактическомфайл на диске из BufferedWriter, программа закрывается и содержимое теряется.

Чтобы избежать этого, вы можете вызвать flush сразу после записи содержимого в bw1,

bw1.write(c);
bw1.newLine();
bw1.flush();

ИЛИ

Прежде чем ваша программа завершится, вы должны позвонить

bw1.close(); // this ensures all content in buffered writer gets push to disk before jvm exists

Вызывать сброс каждый раз, когда вы записываете данные, на самом деле не рекомендуется, так как это противоречит цели буферизованной записи.

ТакЛучше всего закрыть буферизованный объект записи.Это можно сделать двумя способами:

  1. Try-with-resources
  2. В конце закройте буферный объект записи вручную, вероятно, в блоке finally, чтобы обеспечить его вызов..

Помимо всего этого, вам нужно убедиться, что ваше регулярное выражение соответствует вашему условию,

if(i==0){

будет выполнено, иначе код, записывающий данные в файл, не будет выполнени, конечно, в этом случае запись в файл не произойдет.

Кроме того, настоятельно рекомендуется закрыть любой из ресурсов, которые вы открываете, например, файловые ресурсы, ресурсы базы данных (Connection, Statements, ResultSets) и т. д.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...