import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;

public class PengalihanProses {
    public static void main(String[] args) throws Exception {
        Path berkas = Path.of("laporan.txt");

        // 1) Output anak ditulis ke berkas (mengganti isi).
        ProcessBuilder tulis = new ProcessBuilder("/bin/echo", "baris pertama");
        tulis.redirectOutput(berkas.toFile());
        tulis.start().waitFor();
        System.out.println("isi berkas : " + Files.readString(berkas).trim());

        // 2) Mode append menambah tanpa mengganti.
        ProcessBuilder tambah = new ProcessBuilder("/bin/echo", "baris kedua");
        tambah.redirectOutput(ProcessBuilder.Redirect.appendTo(berkas.toFile()));
        tambah.start().waitFor();
        System.out.println("jumlah baris: " + Files.readAllLines(berkas).size());

        // 3) stderr anak digabung ke stdout-nya.
        ProcessBuilder gabung = new ProcessBuilder("/bin/sh", "-c",
                "echo ke-stdout; echo ke-stderr >&2");
        gabung.redirectErrorStream(true);
        Process anak = gabung.start();
        String tampil = new String(anak.getInputStream().readAllBytes(),
                StandardCharsets.UTF_8);
        anak.waitFor();
        System.out.println("tergabung  : " + tampil.replace("\n", " ").trim());
    }
}
