javaでログをマージする

コード
```Java
public class Main {

	
	public static final String BACKUPDIR = "C:\\hoge\\backup";
	public static final String MERGEDDIR = "C:\\hoge\\merged";
	public static List<String> bkDirs;
	public static List<String> bkFileNames;
	
	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		
		
		
	}
	
	
	public void filenameListOut() {
		// backupフォルダのパスを取得
				Path backupDir = Paths.get(BACKUPDIR);		
				
				// 
				bkFileNames = new ArrayList<String>();
				// backupフォルダ配下のフォルダ名を取得
				try {
					Files.walk(backupDir)
					.filter(Files::isRegularFile) // ファイルのみ対象
					.forEach(path -> {
						String fileName = path.getFileName().toString();
						bkFileNames.add(fileName);
					});
				} catch (IOException e) {
					// TODO 自動生成された catch ブロック
					e.printStackTrace();
				}
				
				for(var str : bkFileNames){
					System.out.println(str);
					
					Path p = Paths.get(MERGEDDIR + "\\" + str);
					if(Files.exists(p)) {
						// ファイルが存在する場合
					}else {
						// ファイルが存在しない場合作成する
						
					}
				}
	}

}
```


ファイル作成
```Java
import java.io.IOException;
import java.nio.file.*;

public class FileCheckAndCreate {
    public static void main(String[] args) {
        // 作成したいファイルのパスを指定
        Path filePath = Paths.get("C:\\hoge\\output.txt");

        // ファイルの存在チェック
        if (Files.exists(filePath)) {
            System.out.println("ファイルは既に存在します: " + filePath);
        } else {
            try {
                // ファイルが存在しない場合は作成
                Files.createFile(filePath);
                System.out.println("新しいファイルを作成しました: " + filePath);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

```

```Java
import java.io.*;
import java.nio.file.*;
import java.nio.charset.StandardCharsets;
import java.util.*;

public class FileMerger {
    public static void main(String[] args) throws IOException {
        // backupフォルダとmergedフォルダのパスを指定
        Path backupDir = Paths.get("C:\\hoge\backup");
        Path mergedDir = Paths.get("C:\\hoge\\merged");

        // mergedフォルダが存在しない場合は作成
        if (!Files.exists(mergedDir)) {
            Files.createDirectory(mergedDir);
        }

        // ファイルマッピング用のMapを作成 (ファイル名 -> List<ファイルパス>)
        Map<String, List<Path>> fileMap = new HashMap<>();

        // backupフォルダ配下のすべてのサブフォルダおよびファイルを探索
        Files.walk(backupDir)
            .filter(Files::isRegularFile) // ファイルのみ対象
            .filter(path -> path.toString().endsWith(".txt")) // テキストファイルのみ
            .forEach(path -> {
                String fileName = path.getFileName().toString();
                fileMap.computeIfAbsent(fileName, k -> new ArrayList<>()).add(path);
            });

        // ファイルを結合してmergedフォルダに出力
        for (Map.Entry<String, List<Path>> entry : fileMap.entrySet()) {
            String fileName = entry.getKey();
            List<Path> filePaths = entry.getValue();
            Path mergedFile = mergedDir.resolve(fileName);

            // ファイルの結合処理
            try (BufferedWriter writer = Files.newBufferedWriter(mergedFile, StandardCharsets.UTF_8, StandardOpenOption.CREATE, StandardOpenOption.APPEND)) {
                for (Path filePath : filePaths) {
                    byte[] fileContent = Files.readAllBytes(filePath); // ファイルをバイト単位で読み込む
                    writer.write(new String(fileContent, StandardCharsets.UTF_8)); // 文字列として書き込む
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        System.out.println("ファイルの結合が完了しました！");
    }
}

```