# Ausgabe in Datei umleiten



## Wurstsalat (3. Jan 2008)

Hallo,

ich habe versucht ein Verzeichnis aufzulisten und dann das Ergebnis in eine Datei umzuleiten.


```
import java.io.File;
import java.io.PrintWriter;

public class BuchstabenAbschneiden {

	public static void main(String[] args) {
		try {
			File f = new File("test.txt");
			f.createNewFile();
			File auflisten = new File("C:/");
			File[] fileArray = auflisten.listFiles();
			for (int i = 0; i < fileArray.length; i++) {
				PrintWriter pw = new PrintWriter("C:/test.txt");
				pw.println(fileArray[i]);
				pw.close();
			}

		} catch (Exception e) {
			System.out.println(e);

		}

	}

}
```

Das funktioniert auch, nur hab ich ein Problem mit dem PrintWriter da er mir ja jedes Mal neu in die Datei schreibt und am Ende nur noch C:\Windows drinsteht. Gibt es noch eine andere konfortablere Möglichkeit die Konsolen-Ausgabe in eine Datei umzuleiten? Stört euch bitte nicht an den wirren Bezeichnungen der Variablen und der Klasse. Ich glaube ich brauche irgendeinen Buffer nur bin ich mir nicht so wirklich im klaren wie das funktioniert.


```
for (int i = 0; i < fileArray.length; i++) {
  PrintWriter pw = new PrintWriter(new BufferedWriter(
      new FileWriter("C:/test.txt")));
  pw.println(fileArray[i]);
  pw.flush();
			}
```

Aber das ändert ja nichts am Grundproblem....


----------



## maki (3. Jan 2008)

Du erzeugst in jedem Durchgang einen neuen Printwriter mit demselben Dateinamen.


----------



## SlaterB (3. Jan 2008)

1.)
den PrintWriter nur EINMAL definieren, z.B. vor der Schleife, am Anfang des Programms usw.
2)
FileWriter mit Konstruktor-Parameter append verwenden, um Datei nicht zu überschreiben, sondern neuen Text anzuhängen
(1. ist aber besser)
3)
Information in einem StringBuilder in Java zusammenkleben und am Ende einmalig in die Datei schreiben
(leicht besser als 1., aber Geschmackssache)


----------



## Gelöschtes Mitglied 5909 (3. Jan 2008)

> Gibt es noch eine andere konfortablere Möglichkeit die Konsolen-Ausgabe in eine Datei umzuleiten?



http://logging.apache.org/log4j/


```
# Set root logger level to DEBUG and output to Console. 
log4j.rootLogger=DEBUG, stdout, file 

# Stdout output is set to be a ConsoleAppender. 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
# Stdout uses PatternLayout. 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
# Print the date in ISO 8601 format 
# log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy.MM.dd HH:mm:ss} %-5p: %m%n

# Log to file
log4j.appender.file=org.apache.log4j.RollingFileAppender 
log4j.appender.file.File=log/application.log 
log4j.appender.file.MaxFileSize=100KB 
log4j.appender.file.layout=org.apache.log4j.PatternLayout 
log4j.appender.file.layout.ConversionPattern=%d{yyyy.MM.dd HH:mm:ss} %-5p: %m%n
```

so z.b. 

da erhälst du dann einen logger der auf die console und in die Datei schreibt.
Ansonsten kannst du noch mittels System.setOut() und System.setErr() einen anderen PrintStream als
die beiden standards System.out und Systen.err setzen


----------



## Wurstsalat (5. Jan 2008)

http://www.galileocomputing.de/open...12_007.htm#mj80ad0c1fd81fb6ea34210e9e5fb2d726

```
import java.io.File;
import java.io.PrintWriter;
import java.io.BufferedWriter;
import java.io.FileWriter;

public class BuchstabenAbschneiden {

	public static void main(String[] args) {

		String pfad = "C:/";
		String ausgabe = "C:/test.txt";
		int pfadLaenge = pfad.length();

		PrintWriter pw = null;
		try {
			File f = new File("test.txt");
			f.createNewFile();

			File auflisten = new File(pfad);
			File[] fileArray = auflisten.listFiles();

			FileWriter fw = new FileWriter(ausgabe);
			BufferedWriter bw = new BufferedWriter(fw);
			pw = new PrintWriter(bw);
			pw.println("PfadLaenge:" + pfadLaenge);
			for (int i = 0; i < fileArray.length; i++)
				pw.println(fileArray[i]);

		} catch (Exception e) {
			System.out.println(e);

		} finally {
			pw.close();
		}
	}

}
```

Danke an alle


----------

