再帰検索+テキストデータの連結
WSDLより、Javaソースを作成すると、web.xmlとかがWSDLファイル数分できました。
で、それらを連結しなくちゃいけないんだけど、ファイル数が20ぐらいあるので、プログラムを組んでみました。
ただ、web.xmlの宣言部やROOT要素は共通なので、不要。
よって、web.xmlの1,2,最終行は連結しない。
以下、ソース。
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class Concat { /** 指定フォルダ用定数 */ private static final String FOLDER_PATH = "C:\\Users\\Public\\Desktop\\Test"; /** 指定ファイル名用定数 */ private static final String FILE_NAME = "web.xml"; /** * メイン処理。 * * @param args 使用しません * @throws Exception 実行時例外 */ public static void main(String[] args) throws Exception { // 指定フォルダ File file = new File(FOLDER_PATH); // ファイルリストの取得 List<File> list = getFile(file, FILE_NAME); BufferedWriter bw = null; try { bw = new BufferedWriter(new FileWriter(FILE_NAME)); for (File f : list) { List<String> lines = getLineText(f); for (int i = 0; i < lines.size(); i++) { if (i == 0 || i == 1 || i == lines.size() - 1) { // 特定の行のみコピーしない continue; } bw.write(lines.get(i)); bw.newLine(); } } } finally { if (bw != null) { bw.close(); } } } /** * 指定ファイル内のテキストを、行単位でリストにし返す。 * * @param file 指定ファイル * @return 行単位のテキストデータ * @throws IOException 入出力例外 */ private static List<String> getLineText(File file) throws IOException { // 返却値 List<String> lines = new ArrayList<String>(); BufferedReader br = null; try { br = new BufferedReader(new FileReader(file)); String line = null; // ファイルが存在する間ループ while ((line = br.readLine()) != null) { lines.add(line); } } finally { if (br != null) { br.close(); } } return lines; } /** * ファイル名を指定し、指定フォルダ以下のファイルリストを再帰的に取得します。 * * @param folder 指定フォルダ * @param fileName ファイル名 * @return ファイルリスト */ private static List<File> getFile(File folder, String fileName) { // 返却値 List<File> list = new ArrayList<File>(); File[] files = folder.listFiles(); for (File file : files) { if (file.isDirectory()) { // 同一ファイル名を再帰検索 list.addAll(getFile(file, fileName)); continue; } if (file.getName().equals(fileName)) { // 同一ファイル名のパスを追加 list.add(file); } } return list; } }
getFileで再帰的にweb.xmlを検索。
mainのループの中でファイルのテキストデータを取得し、
その指定行数以外をReaderに出力。
って流れかな?
再帰って久々に使った・・・。