package easyIO; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.PrintStream; import java.io.PrintWriter; /** *

Klasse for enkel skriving til fil og skjerm. Tilbyr metoder for * formatering av tegn, tall og tekst. ?nsket posisjonering angis * evt. med en av konstantene, hhv. LEFT, RIGHT eller * CENTER * *

Klassen benytter Format-klassen for formateringen. ?nsker man * stringkonkatenering sammen med formatering av tekst m? man benytte * Format-klassen sammen med out / outln metodene. * *

Eksempler p? bruk:
* For skriving til fil: *

 * // Lager fil-objektet.
 * OutExp utfil = new OutExp("filnavn");
 *
 * // skriver ut et tall (123)
 * utfil.out(123);
 *
 * // skriver ut linjeskift
 * utfil.outln();
 *
 * // utskrift med linjeskift.
 * utfil.outln("En linje med tekst");
 *
 * // skriver ut desimaltallet 123.456 med to desimaler.
 * utfil.outln(123.456, 2);
 *
 * // som over, h?yrejustert p? 10 plasser.
 * utfil.outln(123.456, 2, 10);
 *
 * // Teksten skrives h?yrejustert p? 10 plasser.
 * utfil.outln("Til h?yre", 10, OutExp.RIGHT);
 *
 * // Lukker filen etter skriving.
 * utfil.close();
 * 
* * @see easyIO.Format * @author Forfatterne av "Rett p? Java" * @version 5.0. (april 2007) */ public class OutExp { public static final int LEFT = 1; public static final int RIGHT = 2; public static final int CENTER = 3; protected PrintStream stdout; // settes i default konstrukt?r protected PrintWriter fout; // settes i fil-konstrukt?r static final String versjon = "ver.3.2 - 2006-08-28"; /** * Lager en skriver som er satt til ? skrive til skjermen (samme * som {@link java.lang.System#out}). */ public OutExp() { stdout = System.out; } /** * Lager en skriver som er satt til ? skrive til en ny fil * med det oppgitte filnavnet. Evt. eksisterende fil blir skrevet * over. * * @param filnavn navn p? filen. * @see #OutExp(String, boolean) * @throws IOException hvis filen ikke kan opprettes. */ public OutExp(String filnavn) throws IOException { this(filnavn, false); } /** * Konstrukt?r for oppretting av skriveobjekt til fil. * Hvis append er true f?yes utskriften * til slutt hvis filen allerede eksisterer (den skrives alts? ikke * over). * * @param filnavn navn p? filen. * @param append hvis true legges utskriften til slutt * i eksisterende fil. * @throws IOException hvis filen ikke kan opprettes. */ public OutExp(String filnavn, boolean append) throws IOException { fout = new PrintWriter (new BufferedWriter(new FileWriter(filnavn, append))); } /** * Skriver ut et linjeskift */ public void outln() { if (stdout != null) stdout.println(); else fout.println(); } /** * Skriver ut teksten s * @param s teksten som skal skrives ut. */ public void out(String s) { if (stdout != null) stdout.print(s); else fout.print(s); } /** * Som {@link #out(String)} etterfulgt av linjeskift. * @param s teksten som skal skrives ut. */ public void outln(String s) { out(s); outln(); } /** * Skriver ut et tegn. * @param c tegnet som skal skrives ut. */ public void out(char c) { if (stdout != null) stdout.print(c); else fout.print(c); } /** * Skriver ut et tegn, venstrejustert p? * width plasser. * @param c tegnet som skal skrives ut. * @param width bredden p? feltet. */ public void out(char c, int width) { out(Format.alignLeft(c, width)); } /** * Som {@link #out(char)} etterfulgt av linjeskift. * @param c tegnet som skal skrives ut. */ public void outln(char c) { out(c); outln(); } /** * Som {@link #out(char, int)}, etterfulgt av linjeskift. * @param c tegnet som skal skrives ut * @param width bredden p? feltet */ public void outln(char c, int width) { outln(Format.alignLeft(c, width)); } /** * Skriver ut et tegn, venstre- eller h?yre-justert eller * sentrert p? width plasser. Justering, * evt. sentrering angis med en av f?lgende konstanter: *
     * LEFT, RIGHT, CENTER
     * 
* @param c tegnet som skal skrives ut * @param width bredden p? feltet * @param ALIGN angir h?yre, venstre eller sentrert justering */ public void out(char c, int width, final int ALIGN) { switch(ALIGN) { case LEFT: out(Format.alignLeft(c, width)); break; case RIGHT: out(Format.align(c, width)); break; case CENTER: out(Format.center(c, width)); break; default : throw new IllegalArgumentException ("Ukjent konstant. ALIGN m? v?re enten LEFT, RIGHT" + ", eller CENTER"); //break; } } /** * Som {@link #out(char, int, int)} etterfulgt av linjeskift. * @param c tegnet som skal skrives ut * @param width bredden p? feltet * @param ALIGN angir enten h?yre, venstre eller sentrert justering. */ public void outln(char c, int width, final int ALIGN) { out(c, width, ALIGN); outln(); } /** * Skriver ut et heltall. * @param i heltallet som skal skrives ut */ public void out(int i) { if (stdout != null) stdout.print(i); else fout.print(i); } /** * Som {@link #out(int)} etterfulgt av linjeskift. * @param i heltallet som skal skrives ut. */ public void outln(int i) { out(i); outln(); } /** * Skriver ut et heltall, h?yrejustert p? * width plasser. Hvis oppgitt bredde er for liten * skrives det ut opptill tre prikker. * @param i heltallet som skal skrives ut. * @param width bredden p? feltet. */ public void out(int i, int width) { out(Format.align(i, width)); } /** * Som for {@link #out(int, int)}, etterfulgt av linjeskift. * @param i heltallet som skal skrives ut. * @param width bredden p? feltet. */ public void outln(int i, int width) { outln(Format.align(i, width)); } /** * Som for {@link #out(int, int)}. Siste parameter gir mulighet * for ? velge enten h?yre-, venstre- eller sentrert justering. * @param i heltallet som skal skrives ut. * @param width bredden p? feltet. * @param ALIGN angir enten h?yre, venstre eller sentrert justering. */ public void out(int i, int width, final int ALIGN) { switch(ALIGN) { case LEFT: out(Format.alignLeft(i, width)); break; case RIGHT: out(Format.align(i, width)); break; case CENTER: out(Format.center(i, width)); break; default : throw new IllegalArgumentException ("Ukjent konstant. ALIGN m? v?re enten LEFT, RIGHT" + ", eller CENTER"); //break; } } /** * som for {@link #out(int, int, int)} etterfulgt av linjeskift. * @param i heltallet som skal skrives ut. * @param width bredden p? feltet. * @param ALIGN angir enten h?yre, venstre eller sentrert justering. */ public void outln(int i, int width, final int ALIGN) { out(i, width, ALIGN); outln(); } /** * Som {@link #out(int)} men skriver ut et desimaltall. * @param d tallet som skal skrives ut. */ public void out(double d) { if (stdout != null) stdout.print(d); else fout.print(d); } /** * Som {@link #outln(int)} men skriver ut desimaltall. * @param d tallet som skal skrives ut. */ public void outln(double d) { out(d); outln(); } /** * Skriver ut et desimaltall med decimals * antall desimaler. * @param d tallet som skal skrives ut * @param decimals antall desimaler som skal skrives ut. * @see Format#format */ public void out(double d, int decimals) { out(Format.format(d, decimals)); } /** * Som {@link #out(double, int)}, etterfulgt av linjeskift. * @param d tallet som skal skrives ut * @param decimals antall desimaler som skal skrives ut. * @see Format#format */ public void outln(double d, int decimals) { outln(Format.format(d, decimals)); } /** * Skriver ut et desimaltall h?yrejustert p? * width plasser med decimals siffer * etter komma. Hvis oppgit bredde er for liten, skrives det ut * opptill tre prikker. * @param d tallet som skal skrives ut * @param decimals antall desimaler som skal skrives ut. * @param width bredden p? feltet. * @see Format#format */ public void out(double d, int decimals, int width) { out(Format.align(d, width, decimals)); } /** * Som {@link #out(double, int, int)} etterfulgt av linjeskift. * @param d tallet som skal skrives ut * @param decimals antall desimaler som skal skrives ut. * @param width bredden p? feltet. * @see Format#format */ public void outln(double d, int decimals, int width) { outln(Format.align(d, width, decimals)); } /** * Som {@link #outln(double, int, int)}. Siste parameter gir mulighet * for ? velge enten h?yre-, venstre- eller sentrert justering. * @param d tallet som skal skrives ut * @param decimals antall desimaler som skal skrives ut. * @param width bredden p? feltet. * @param ALIGN angir enten h?yre, venstre eller sentrert justering. * @see Format#format */ public void out(double d, int decimals, int width, final int ALIGN) { switch(ALIGN) { case LEFT: out(Format.alignLeft(d, width, decimals)); break; case RIGHT: out(Format.align(d, width, decimals)); break; case CENTER: out(Format.center(d, width, decimals)); break; default : throw new IllegalArgumentException ("Ukjent konstant. ALIGN m? v?re enten LEFT, RIGHT" + ", eller CENTER"); //break; } } /** * Som {@link #out(double, int, int, int)} etterfulgt av linjeskift. * @param d tallet som skal skrives ut * @param decimals antall desimaler som skal skrives ut. * @param width bredden p? feltet. * @param ALIGN angir enten h?yre, venstre eller sentrert justering. * @see Format#format */ public void outln(double d, int decimals, int width, final int ALIGN) { out(d, decimals, width, ALIGN); outln(); } /** * Skriver ut teksten s h?yrejustert p? * width plasser. Hvis oppgitt bredde er for liten * skrives det ut optill tre prikker. * @param s teksten som skal skrives ut * @param width bredden p? feltet. */ public void out(String s, int width) { out(Format.alignLeft(s, width)); } /** * Som {@link #out(String, int)}, etterfulgt av linjeskift. * @param s teksten som skal skrives ut. * @param width bredden p? feltet. */ public void outln(String s, int width) { outln(Format.alignLeft(s, width)); } /** * Skriver ut en tekst med oppgitt Siste parameter gir mulighet * for ? velge enten h?yre-, venstre- eller sentrert justering. * @param s teksten som skal skrives ut. * @param width bredden p? feltet. * @param ALIGN angir enten h?yre, venstre eller sentrert justering. */ public void out(String s, int width , final int ALIGN) { switch(ALIGN) { case LEFT: out(Format.alignLeft(s, width)); break; case RIGHT: out(Format.align(s, width)); break; case CENTER: out(Format.center(s, width)); break; default : throw new IllegalArgumentException ("Ukjent konstant. ALIGN m? v?re enten LEFT, RIGHT" + ", eller CENTER"); //break; } } /** * Som {@link #out(String, int, int)}, etterfulgt av linjeskift. * @param s teksten som skal skrives ut. * @param width bredden p? feltet. * @param ALIGN angir enten h?yre, venstre eller sentrert justering. */ public void outln(String s, int width, final int ALIGN) { out(s, width, ALIGN); outln(); } /** * Skriver ut Object o ved ? kalle objektets * toString() metode. * @param o objektet som skal skrives ut. */ public void out(Object o) { if (stdout != null) stdout.print(o); else fout.print(o); } /** * Som {@link #out(Object)} etterfulgt av linjeskift. * @param o objektet som skal skrives ut. */ public void outln(Object o) { out(o); outln(); } /** * Lukker fil etter skriving. */ public void close() { if (stdout == null) fout.close(); } }