import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.File;
import java.io.IOException;

public class FileOutput {
  private static void expect(boolean v) {
    if (! v) throw new RuntimeException();
  }

  private static void test(boolean appendFirst) throws IOException {
    try {
      FileOutputStream f = new FileOutputStream("test.txt", appendFirst);
      f.write("Hello world!\n".getBytes());
      f.close();
      
      FileOutputStream f2 = new FileOutputStream("test.txt", true);
      f2.write("Hello world again!".getBytes());
      f2.close();
      
      FileInputStream in = new FileInputStream("test.txt");
      byte[] buffer = new byte[256];
      int c;
      int offset = 0;
      while ((c = in.read(buffer, offset, buffer.length - offset)) != -1) {
        offset += c;
      }
      in.close();

      if (! "Hello world!\nHello world again!".equals
          (new String(buffer, 0, offset)))
      {
        throw new RuntimeException();
      }
    } finally {
      expect(new File("test.txt").delete());
    }
  }

  public static void main(String[] args) throws IOException {
    expect(new File("nonexistent-file").length() == 0);

    test(false);
    test(true);
  }

}