テキストデータを読み込み、重複部分(重複行)以外を出力する。
ロジック
- readyメソッド
- 入力するファイルのパスを指定
- 出力するファイルのパスを指定
- grepキーワードを指定
- readメソッド
- writerメソッド
- for (String s : uniqLines) によって、uniqLinesの要素を順番に書き出す。
- -
import java.util.*; import java.io.*; public class UniqLineOutput { private static ArrayList<String> uniqLines = new ArrayList<String>(); // ユニークな行を格納するArrayList private static String str; // 読み込んだ1行を格納する private static String inputFileName; // 入力するファイルパス private static String outputFileName; // 出力するファイルパス private static File inputFile; // パスを受けて入力するファイル private static File outputFile; // パスを受けて出力するファイル private static String grepKeyword1; // grepキーワード1 private static String grepKeyword2; // grepキーワード2 private static BufferedReader stdIn = new BufferedReader( new InputStreamReader(System.in)); // 文字列読み込み用 private static BufferedReader br = null; // ファイルを読み込む private static BufferedWriter bw = null; // ファイルに書き込み public static void main(String[] args) { UniqLineOutputTest_02 UniqLineOutputTest02 = new UniqLineOutputTest_02(); UniqLineOutputTest02.ready(); UniqLineOutputTest02.read(); UniqLineOutputTest02.writer(); System.out.println("END"); } public void ready() { System.out.println("読み込みたいテキストファイルのパスを入力してください"); try { inputFileName = stdIn.readLine(); } catch (Exception e) { e.printStackTrace(); } System.out.println("出力するファイルのファイル名を入力してください。\n" + "ディレクトリを指定して作成する場合は、\n" + "作成先ディレクトリのパスを指定してください。\n" + "上記以外はカレントディレクトリに作成します。"); try { outputFileName = stdIn.readLine(); } catch (Exception e) { e.printStackTrace(); } System.out.println("Grepするキーワード1を入力してください"); try { grepKeyword1 = stdIn.readLine(); } catch (Exception e) { e.printStackTrace(); } System.out.println("Grepするキーワード2を入力してください"); try { grepKeyword2 = stdIn.readLine(); } catch (Exception e) { e.printStackTrace(); } } public void read() { inputFile = new File(inputFileName); outputFile = new File(outputFileName); try { br = new BufferedReader(new FileReader(inputFile)); bw = new BufferedWriter(new FileWriter(outputFile)); } catch (Exception ex) { ex.printStackTrace(); } try { while ((str = br.readLine()) != null) { if (uniqLines.contains(str) == true) { uniqLines.remove(str); } else if ((str.indexOf(grepKeyword1) != (-1)) | (str.indexOf(grepKeyword2) != (-1))) { uniqLines.add(str); } } } catch (Exception e) { e.printStackTrace(); } catch (Error er){ er.printStackTrace(); } } public void writer() { try { for (String s : uniqLines) { bw.write(s); bw.newLine(); bw.flush(); } } catch (Exception e) { e.printStackTrace(); } finally { try { stdIn.close(); bw.close(); br.close(); } catch (IOException e) { e.printStackTrace(); } } } }