質問編集履歴

3

文法修正

2020/05/21 08:01

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -8,15 +8,7 @@
8
8
 
9
9
  ・一行ずつ読み込んでファイルに書き込みとコンソールに出力をさせたい
10
10
 
11
- ・extractメソッドにあるclose()が必要なところにfinally句で必ず実行させるようにしたい。
11
+ ・extractメソッドにあるclose()が必要なところにfinally句で必ず実行させるようにしたい。 
12
-
13
-
14
-
15
- <質問>
16
-
17
- ・ 1行ずつmarkErroLine,extractDateLogを行えるようにしたいのですが、どうすればいいですか?
18
-
19
- ・毎回IOExceptionが発生してしまうので判定などで回避したい。理由:Throwsやcatchは重いため。  
20
12
 
21
13
  <前提>
22
14
 
@@ -28,9 +20,7 @@
28
20
 
29
21
  4: 引数で渡された日付(Calendar-Class)に該当する行をファイルに出力する メソッド「extractDateLog」を作成
30
22
 
31
- 5: 他に共通する処理があれば、任意のメソッドを作成して処理をしたい。
32
-
33
- 6: 結果として、以下のように記載の内容を表示したい。
23
+ 5: 結果として、以下のように記載の内容を表示したい。
34
24
 
35
25
 
36
26
 
@@ -58,10 +48,6 @@
58
48
 
59
49
  2019/01/11 13:30:10.923 DEBUG (DBLogic.java closeConnection) - DBコネクションクローズ
60
50
 
61
- 2019/01/11 13:30:19.177 DEBUG (DBLogic.java getConnection) - DBコネクション取得
62
-
63
- 2019/01/11 13:30:19.177 DEBUG (DBLogic.java begin) - トランザクション開始
64
-
65
51
  ### 該当のソースコード
66
52
 
67
53
 
@@ -797,3 +783,45 @@
797
783
 
798
784
 
799
785
  ```
786
+
787
+ ###追記3
788
+
789
+ mark method を用いたら解決しました。
790
+
791
+ ```
792
+
793
+ br.mark((int)file.length());
794
+
795
+ String line;
796
+
797
+ while ((line = br.readLine()) != null) {
798
+
799
+ markErrorLine(newErrorfile, line);
800
+
801
+
802
+
803
+
804
+
805
+ }
806
+
807
+ br.reset();
808
+
809
+ System.out.println("3. app_20190111.log");
810
+
811
+
812
+
813
+ String line1;
814
+
815
+ while ((line1 = br.readLine()) != null) {
816
+
817
+
818
+
819
+ extractDateLog(cal, line1);
820
+
821
+
822
+
823
+
824
+
825
+ }
826
+
827
+ ```

2

文法の修正

2020/05/21 08:01

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -10,11 +10,7 @@
10
10
 
11
11
  ・extractメソッドにあるclose()が必要なところにfinally句で必ず実行させるようにしたい。
12
12
 
13
- ・extractDateLogメソッドループないで毎回パターンを作らずに行いたい
13
+
14
-
15
- ・markErrorLineメソッド
16
-
17
- ・l.replaceFirst("^(.*)(FATAL|ERROR)(.*)$", "★$0")をファイル出力とコンソール出力を1回でしたい。
18
14
 
19
15
  <質問>
20
16
 
@@ -22,8 +18,6 @@
22
18
 
23
19
  ・毎回IOExceptionが発生してしまうので判定などで回避したい。理由:Throwsやcatchは重いため。  
24
20
 
25
-
26
-
27
21
  <前提>
28
22
 
29
23
  1:「app.log」というファイルを読み込んで、「ERROR」「FATAL」行の先頭に「★」印を印字したファイル「app_error.log」を作成
@@ -34,17 +28,11 @@
34
28
 
35
29
  4: 引数で渡された日付(Calendar-Class)に該当する行をファイルに出力する メソッド「extractDateLog」を作成
36
30
 
37
- 4-1: MarkErrorLine method and ExtractDateLog method をexecute methodから呼んで処理をする
38
-
39
- 4-2: execute methodはmain method から呼ぶ
40
-
41
31
  5: 他に共通する処理があれば、任意のメソッドを作成して処理をしたい。
42
32
 
43
- 6: できれば、出力ファイルはクラスファイル実行ディレクトリと同一階層に出力
44
-
45
- 7: 結果として、以下のように記載の内容を表示したい。
33
+ 6: 結果として、以下のように記載の内容を表示したい。
46
-
47
- 8:Javadocの記載があれば有り難いです。
34
+
35
+
48
36
 
49
37
  ExampleOfOutput:
50
38
 
@@ -74,14 +62,6 @@
74
62
 
75
63
  2019/01/11 13:30:19.177 DEBUG (DBLogic.java begin) - トランザクション開始
76
64
 
77
-
78
-
79
-
80
-
81
-
82
-
83
-
84
-
85
65
  ### 該当のソースコード
86
66
 
87
67
 
@@ -408,139 +388,385 @@
408
388
 
409
389
  ERRORやFATALに合致したログを★を付け加えて編集させて出力とファイルに書き込みしたいのに、これは出力も書き込みもされていませんでした。
410
390
 
391
+ ```java
392
+
393
+ import java.io.BufferedReader;
394
+
395
+ import java.io.BufferedWriter;
396
+
397
+ import java.io.File;
398
+
399
+ import java.io.FileNotFoundException;
400
+
401
+ import java.io.FileReader;
402
+
403
+ import java.io.FileWriter;
404
+
405
+ import java.io.IOException;
406
+
407
+ import java.io.PrintWriter;
408
+
409
+ import java.text.SimpleDateFormat;
410
+
411
+ import java.util.Calendar;
412
+
413
+ import java.util.Date;
414
+
415
+ import java.util.regex.Matcher;
416
+
417
+ import java.util.regex.Pattern;
418
+
419
+
420
+
421
+ /**
422
+
423
+ *ログファイル「app.log」を読み込んで、下記ファイルを作成するプログラム
424
+
425
+ *「FATAL」「ERROR」行の先頭に「★」印を印字したファイル「app_error.log」
426
+
427
+ *「2019年1月11日」の記録を抜き出したファイル「app_20190111.log」
428
+
429
+ */
430
+
431
+ public class Test10 {
432
+
433
+ /**
434
+
435
+ * main
436
+
437
+ * execute method を呼び出す
438
+
439
+ * @param 実行時引数
440
+
441
+ *
442
+
443
+ *
444
+
445
+ * */
446
+
447
+ public static void main(String[] args) {
448
+
449
+
450
+
451
+ Test10 ex10 = new Test10();
452
+
453
+ try {
454
+
455
+ ex10.execute();
456
+
457
+ } catch (IOException e) {
458
+
459
+ System.out.println("入出力例外が発生しました");
460
+
461
+ System.exit(1);
462
+
463
+
464
+
465
+ }
466
+
467
+ }
468
+
469
+
470
+
471
+ /**
472
+
473
+ *Execute method
474
+
475
+ *markErrorLine method and extractDateLog method を呼び出し、
476
+
477
+ * @throws IOException
478
+
479
+ */
480
+
481
+ public void execute() throws IOException {
482
+
483
+
484
+
485
+ System.out.println("1. 実行処理");
486
+
487
+
488
+
489
+ System.out.println("ログファイルの解析処理を開始します");
490
+
491
+ System.out.println("ログファイルの解析処理を終了しました");
492
+
493
+ //ArrayList<String> textLines = new ArrayList<String>();
494
+
495
+
496
+
497
+
498
+
499
+ File file = new File("..\app.log");
500
+
501
+ try( FileReader fr = new FileReader(file);
502
+
503
+ BufferedReader br = new BufferedReader(fr);){
504
+
505
+ //「app_error.log」ファイルを作成
506
+
507
+ File newErrorfile = new File("..\app_error.log");
508
+
509
+ newErrorfile.createNewFile();
510
+
511
+
512
+
513
+ Calendar cal = Calendar.getInstance();
514
+
515
+ cal.set(2019, 00, 11);
516
+
517
+
518
+
519
+
520
+
521
+
522
+
523
+ String line;
524
+
525
+ while ((line = br.readLine()) != null) {
526
+
527
+ markErrorLine(newErrorfile, line);
528
+
529
+ extractDateLog(cal, line);
530
+
531
+
532
+
533
+ //textLines.add(line);
534
+
535
+ }
536
+
537
+
538
+
539
+
540
+
541
+
542
+
543
+ }catch(FileNotFoundException f) {
544
+
545
+ System.out.println("There is no files to be read");
546
+
547
+ System.exit(1);
548
+
549
+ } catch (IOException e) {
550
+
551
+ System.out.println("入出力例外が発生しました");
552
+
553
+ System.exit(1);
554
+
555
+ }
556
+
557
+
558
+
559
+
560
+
561
+
562
+
563
+
564
+
565
+ System.out.println("2. app_error.log");
566
+
567
+ // Exercise10 ex10 = new Exercise10();
568
+
569
+
570
+
571
+ //markErrorLine(newErrorfile, textLines);
572
+
573
+
574
+
575
+
576
+
577
+ System.out.println("3. app_20190111.log");
578
+
579
+
580
+
581
+
582
+
583
+ }
584
+
585
+
586
+
587
+ /**
588
+
589
+ *markErrorLine method
590
+
591
+ * @param line
592
+
593
+ * @param newErrorfile
594
+
595
+ * @throws IOException
596
+
597
+ */
598
+
599
+
600
+
601
+ public void markErrorLine(File newErrorfile, String line)
602
+
603
+ throws IOException {
604
+
605
+ if(line.isEmpty()){
606
+
607
+ String str2 = line.replaceFirst("^(.*)(FATAL|ERROR)(.*)$", "★$0");
608
+
609
+ Fileoutput(newErrorfile, str2);
610
+
611
+
612
+
613
+ //ファイル・コンソールに出力
614
+
615
+ //try(PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(newErrorfile)));){
616
+
617
+ //for (String l : textLines) {
618
+
619
+ //pw.println(l.replaceFirst("^(.*)(FATAL|ERROR)(.*)$", "★$0"));
620
+
621
+ //System.out.println(l.replaceFirst("^(.*)(FATAL|ERROR)(.*)$", "★$0"));
622
+
623
+ //}
624
+
625
+ //pw.close();
626
+
627
+ }
628
+
629
+ }
630
+
631
+
632
+
633
+ //ファイル・コンソールに出力用にメソッドを作成
634
+
635
+ public void Fileoutput(File s , String str2 ){
636
+
637
+ PrintWriter pw = null;
638
+
639
+ try {
640
+
641
+ pw = new PrintWriter(new BufferedWriter(new FileWriter(s)));
642
+
643
+ pw.println(str2);
644
+
645
+ System.out.println(str2);
646
+
647
+ } catch (IOException e) {
648
+
649
+
650
+
651
+ e.printStackTrace();
652
+
653
+ }finally {pw.close();
654
+
655
+
656
+
657
+ }
658
+
659
+
660
+
661
+ }
662
+
663
+
664
+
665
+ /**
666
+
667
+ *extractDateLog method
668
+
669
+ *
670
+
671
+ * @param cal
672
+
673
+ * @param line
674
+
675
+ * @throws IOException
676
+
677
+ */
678
+
679
+ public void extractDateLog(Calendar cal, String line) throws IOException {
680
+
681
+ Date date = cal.getTime();
682
+
683
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
684
+
685
+ String strDate = dateFormat.format(date);
686
+
687
+ SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
688
+
689
+
690
+
691
+ //「app_20190111.log」ファイルを作成
692
+
693
+ String s = "..\app_"+ df.format(date) + ".log";
694
+
695
+
696
+
697
+ File newDatefile = new File(s);
698
+
699
+ newDatefile.createNewFile();
700
+
701
+ Pattern p = Pattern.compile(strDate);
702
+
703
+ Matcher m = p.matcher(line);
704
+
705
+ if (m.find()) {
706
+
707
+ Fileoutput( newDatefile , line);
708
+
709
+ }
710
+
711
+
712
+
713
+
714
+
715
+ }
716
+
717
+ }
718
+
411
719
  ```
412
720
 
413
- import java.io.BufferedReader;
414
-
415
- import java.io.BufferedWriter;
416
-
417
- import java.io.File;
418
-
419
- import java.io.FileNotFoundException;
420
-
421
- import java.io.FileReader;
422
-
423
- import java.io.FileWriter;
424
-
425
- import java.io.IOException;
426
-
427
- import java.io.PrintWriter;
428
-
429
- import java.text.SimpleDateFormat;
430
-
431
- import java.util.Calendar;
432
-
433
- import java.util.Date;
434
-
435
- import java.util.regex.Matcher;
436
-
437
- import java.util.regex.Pattern;
438
-
439
-
440
-
441
- /**
442
-
443
- *ログファイル「app.log」を読み込んで、下記ファイルを作成するプログラム
444
-
445
- *「FATAL」「ERROR」行の先頭に「★」印を印字したファイル「app_error.log」
446
-
447
- *「2019年1月11日」の記録を抜き出したファイル「app_20190111.log」
448
-
449
- */
450
-
451
- public class Test10 {
452
-
453
- /**
454
-
455
- * main
456
-
457
- * execute method を呼び出
458
-
459
- * @param 実行時引数
460
-
461
- *
462
-
463
- *
464
-
465
- * */
466
-
467
- public static void main(String[] args) {
468
-
469
-
470
-
471
- Test10 ex10 = new Test10();
472
-
473
- try {
474
-
475
- ex10.execute();
476
-
477
- } catch (IOException e) {
478
-
479
- System.out.println("入出力例外が発生しました");
480
-
481
- System.exit(1);
482
-
483
-
484
-
485
- }
486
-
487
- }
488
-
489
-
490
-
491
- /**
492
-
493
- *Execute method
494
-
495
- *markErrorLine method and extractDateLog method を呼び出し、
496
-
497
- * @throws IOException
498
-
499
- */
500
-
501
- public void execute() throws IOException {
502
-
503
-
504
-
505
- System.out.println("1. 実行処理");
506
-
507
-
508
-
509
- System.out.println("ログファイルの解析処理を開始します");
510
-
511
- System.out.println("ログファイルの解析処理を終了しました");
512
-
513
- //ArrayList<String> textLines = new ArrayList<String>();
514
-
515
-
516
-
517
-
518
-
519
- File file = new File("..\app.log");
520
-
521
- try( FileReader fr = new FileReader(file);
522
-
523
- BufferedReader br = new BufferedReader(fr);){
524
-
525
- //「app_error.log」ファイルを作成
526
-
527
- File newErrorfile = new File("..\app_error.log");
528
-
529
- newErrorfile.createNewFile();
530
-
531
-
532
-
533
- Calendar cal = Calendar.getInstance();
534
-
535
- cal.set(2019, 00, 11);
536
-
537
-
538
-
539
-
540
-
541
-
542
-
543
- String line;
721
+ [Finally句](https://eng-entrance.com/java-finally)
722
+
723
+
724
+
725
+ ### 補足情報(FW/ツールのバージョンなど)
726
+
727
+
728
+
729
+ java_1.8
730
+
731
+ eclipse_version_14
732
+
733
+ ###追記1
734
+
735
+ 変数に結果を代入してファイル・コンソールに出力させた。
736
+
737
+ ```
738
+
739
+ try(PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(newErrorfile)));){
740
+
741
+ for (String l : textLines) {
742
+
743
+ String s1 = l.replaceFirst("^(.*)(FATAL|ERROR)(.*)$", "★$0");
744
+
745
+ pw.println(s1);
746
+
747
+ System.out.println(s1);
748
+
749
+ }
750
+
751
+ //pw.close();
752
+
753
+ }
754
+
755
+ }
756
+
757
+ ```
758
+
759
+ ###追記2
760
+
761
+ extractDateLog メソッドを実行した後に"3.app_201911.log"を出力しているため、コンソール出力・ファイル書き込み後に出力されていることに気がつきました。
762
+
763
+ ただ、while文のなかでextractDateLogメソッドを実行する直前に記述しても一行ずつ"3.app_201911.log"が出力される気がします。
764
+
765
+ どう修正ればよいかどなたかご教示願います。
766
+
767
+ ```Java
768
+
769
+ String line;
544
770
 
545
771
  while ((line = br.readLine()) != null) {
546
772
 
@@ -550,232 +776,24 @@
550
776
 
551
777
 
552
778
 
553
- //textLines.add(line);
779
+
554
780
 
555
781
  }
556
782
 
557
-
558
-
559
-
560
-
561
-
562
-
563
- }catch(FileNotFoundException f) {
564
-
565
- System.out.println("There is no files to be read");
566
-
567
- System.exit(1);
568
-
569
- } catch (IOException e) {
570
-
571
- System.out.println("入出力例外が発生しました");
572
-
573
- System.exit(1);
574
-
575
- }
576
-
577
-
578
-
579
-
580
-
581
-
582
-
583
-
584
-
585
- System.out.println("2. app_error.log");
586
-
587
- // Exercise10 ex10 = new Exercise10();
588
-
589
-
590
-
591
- //markErrorLine(newErrorfile, textLines);
592
-
593
-
594
-
595
-
596
-
597
- System.out.println("3. app_20190111.log");
783
+ System.out.println("3. app_20190111.log");
598
-
599
-
600
-
601
-
602
-
603
- }
604
-
605
-
606
-
607
- /**
608
-
609
- *markErrorLine method
610
-
611
- * @param line
612
-
613
- * @param newErrorfile
614
-
615
- * @throws IOException
616
-
617
- */
618
-
619
-
620
-
621
- public void markErrorLine(File newErrorfile, String line)
622
-
623
- throws IOException {
624
-
625
- if(line.isEmpty()){
626
-
627
- String str2 = line.replaceFirst("^(.*)(FATAL|ERROR)(.*)$", "★$0");
628
-
629
- Fileoutput(newErrorfile, str2);
630
-
631
-
632
-
633
- //ファイル・コンソールに出力
634
-
635
- //try(PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(newErrorfile)));){
636
-
637
- //for (String l : textLines) {
638
-
639
- //pw.println(l.replaceFirst("^(.*)(FATAL|ERROR)(.*)$", "★$0"));
640
-
641
- //System.out.println(l.replaceFirst("^(.*)(FATAL|ERROR)(.*)$", "★$0"));
642
-
643
- //}
644
-
645
- //pw.close();
646
-
647
- }
648
-
649
- }
650
-
651
-
652
-
653
- //ファイル・コンソールに出力用にメソッドを作成
654
-
655
- public void Fileoutput(File s , String str2 ){
656
-
657
- PrintWriter pw = null;
658
-
659
- try {
660
-
661
- pw = new PrintWriter(new BufferedWriter(new FileWriter(s)));
662
-
663
- pw.println(str2);
664
-
665
- System.out.println(str2);
666
-
667
- } catch (IOException e) {
668
-
669
-
670
-
671
- e.printStackTrace();
672
-
673
- }finally {pw.close();
674
-
675
-
676
-
677
- }
678
-
679
-
680
-
681
- }
682
-
683
-
684
-
685
- /**
686
-
687
- *extractDateLog method
688
-
689
- *
690
-
691
- * @param cal
692
-
693
- * @param line
694
-
695
- * @throws IOException
696
-
697
- */
698
-
699
- public void extractDateLog(Calendar cal, String line) throws IOException {
700
-
701
- Date date = cal.getTime();
702
-
703
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
704
-
705
- String strDate = dateFormat.format(date);
706
-
707
- SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
708
-
709
-
710
-
711
- //「app_20190111.log」ファイルを作成
712
-
713
- String s = "..\app_"+ df.format(date) + ".log";
714
-
715
-
716
-
717
- File newDatefile = new File(s);
718
-
719
- newDatefile.createNewFile();
720
-
721
- Pattern p = Pattern.compile(strDate);
722
-
723
- Matcher m = p.matcher(line);
724
-
725
- if (m.find()) {
726
-
727
- Fileoutput( newDatefile , line);
728
-
729
- }
730
-
731
-
732
-
733
-
734
-
735
- }
736
-
737
- }
738
784
 
739
785
  ```
740
786
 
741
- [Finally句](https://eng-entrance.com/java-finally)
742
-
743
-
744
-
745
- ### 補足情報(FW/ツールのバージョンなど)
746
-
747
-
748
-
749
- java_1.8
750
-
751
- eclipse_version_14
752
-
753
-
754
-
755
-
756
-
757
- ###追記
787
+ 出力結果;
758
-
759
- 変数に結果を代入してファイル・コンソールに出力させた。
760
788
 
761
789
  ```
762
790
 
763
- try(PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(newErrorfile)));){
791
+ 2019/01/16 13:30:23.467 DEBUG (WriteOperationLogLogic.java insert) - ログ証跡出力 終了
764
-
765
- for (String l : textLines) {
792
+
766
-
767
- String s1 = l.replaceFirst("^(.*)(FATAL|ERROR)(.*)$", "★$0");
793
+ 2019/01/16 13:30:23.530 DEBUG (DBLogic.java commit) - トランザクションコミット
768
-
794
+
769
- pw.println(s1);
795
+ 3. app_20190111.log
770
-
771
- System.out.println(s1);
796
+
772
-
773
- }
797
+
774
-
775
- //pw.close();
776
-
777
- }
778
-
779
- }
780
798
 
781
799
  ```

1

修正

2020/05/21 01:53

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -749,3 +749,33 @@
749
749
  java_1.8
750
750
 
751
751
  eclipse_version_14
752
+
753
+
754
+
755
+
756
+
757
+ ###追記
758
+
759
+ 変数に結果を代入してファイル・コンソールに出力させた。
760
+
761
+ ```
762
+
763
+ try(PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(newErrorfile)));){
764
+
765
+ for (String l : textLines) {
766
+
767
+ String s1 = l.replaceFirst("^(.*)(FATAL|ERROR)(.*)$", "★$0");
768
+
769
+ pw.println(s1);
770
+
771
+ System.out.println(s1);
772
+
773
+ }
774
+
775
+ //pw.close();
776
+
777
+ }
778
+
779
+ }
780
+
781
+ ```