# [Java] Dateizugriff



## Dario Linsky (26. Juni 2003)

Hi,

ich versuch gerade, eine Datei als Ausgabestrom zu öffnen. Der Code dazu sieht bis jetzt so aus:

```
private FileWriter logFile;

public Logdatei(String fileName)
{
	File file = new File(fileName);

	// Wenn die Datei noch nicht existiert, neu anlegen. Danach öffnen.
	file.createNewFile();
	this.logFile = new FileWriter(file, true);
}
```
Beim Compilieren bekomm ich aber folgende Fehlermeldungen:

```
Logdatei.java:48: unreported exception java.io.IOException; must be caught or declared to be thrown
		file.createNewFile();
                    ^
Logdatei.java:49: unreported exception java.io.IOException; must be caught or declared to be thrown
		this.logFile = new FileWriter(file, true);
                               ^
```
Weiss irgendjemand von Euch vielleicht, woran das liegt und wie es richtig aussehen müsste? Wäre nett. 

Danke schonmal.


----------



## Thomas Darimont (26. Juni 2003)

Servus!


```
public Logdatei(String fileName)
{

try{
	File file = new File(fileName);

	// Wenn die Datei noch nicht existiert, neu anlegen. Danach öffnen.
	file.createNewFile();
	this.logFile = new FileWriter(file, true);
}catch(IOException ioe){
   System.out.println(ioe);
}
}
```


----------



## Christian Fein (26. Juni 2003)

Zur erklärung:

Du musst in Java immer mögliche exceptions behandeln. 
Entweder deklarierst du die methode so das sie die exception in den aufrufenden Block weiterreicht:

int idosomething() throws IOException {

}

oder aber faengst sie hier ab.


----------



## Dario Linsky (26. Juni 2003)

Ja, das Exceptionhandling ist mir schon klar. Nur brauch ich für die Behandlung der Laufzeitexceptions nunmal dieses Objekt... 

Oder gibt's da vielleicht eine ganz andere Möglichkeit, die auftretenden Exceptions in eine selbst definierte Datei auszugeben?


----------



## Christian Fein (26. Juni 2003)

Versteh dein problem nicht 

Nun du schreibst alle Exceptions in die Datei rein, ausser die Exception beim öffnen der Datei. 
Diese kannst du entweder abfangen oder aber weiter an die vm reichen. 
per throws


----------



## Dario Linsky (26. Juni 2003)

Also... Ich möchte einen Ausgabestrom öffnen, mit dem ich jede Exception formatiert in eine Datei ausgeben kann.
Das ganze Teil soll nachher etwa so aussehen:

```
try
{
    return (1 / 0); // <- Exception
}
catch(Exception ex)
{
    new Logdatei("datei.log").ExceptionEintragen(ex.getMessage());
}
```
Aber dafür brauch ich ja eine Instanz der FileWriter-Klasse... oder kann man die auftretenden Exceptions auch ohne diesen Umweg direkt in eine Datei ausgeben lassen?

Allerdings müssten in der Datei neben den Exceptions auch noch andere Einträge gemacht werden können.

Weisst Du jetzt, was ich meine? 

Okay, mach ich das so. Zwar nicht schön, aber in Ordnung...


----------



## Thomas Darimont (26. Juni 2003)

Servus!

Willst du vielleicht den System.err Asugabedatenstrom auf ne Datei umleiten?


```
import java.io.*;


public class Test{

       public Test(){
       }
       public static void main(String[] args){
       try{
       PrintStream ps = new PrintStream(new FileOutputStream("c:\\error_java.log"));
       
       System.setErr(ps);
       throw new IOException();

       }catch(IOException ioe){
              System.err.println(ioe);
       }
       }

}
```

???

Gruss Tom


----------



## Christian Fein (26. Juni 2003)

Lirion, du kannst ja ohne probleme das File öffnen und bei auftretender exception diese ausgeben. 

Alle anderen Exceptions dann in das file schreiben. Das heisst du wirst genau eine Exception nicht in das File schreiben können, da du kein File öffnen kannst ohne eine Exception abzufangen.


----------



## Thomas Darimont (26. Juni 2003)

Servus!

...

da beißt sich der Hund in den Schwanz ... ^^

Gruss Tom


----------



## Dario Linsky (26. Juni 2003)

Ja, nur wenn ich das File nicht öffnen kann, weil da schon eine Exception auftritt, kann ich auch die anderen möglichen Exceptions nicht mehr in das File schreiben. 
Das ist mein Problem.

Aber die Lösung von Tom geht auch, denke ich. Werd ich gleich mal probieren, danke.


----------

