[Java] Dateizugriff

Dario Linsky

Erfahrenes Mitglied
Hi,

ich versuch gerade, eine Datei als Ausgabestrom zu öffnen. Der Code dazu sieht bis jetzt so aus:
Code:
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:
Code:
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

Erfahrenes Mitglied
Servus!

Code:
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

Erfahrenes Mitglied
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

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

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

Christian Fein

Erfahrenes Mitglied
Versteh dein problem nicht :p

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

Erfahrenes Mitglied
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:
Code:
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... :rolleyes:
 
Zuletzt bearbeitet:

Thomas Darimont

Erfahrenes Mitglied
Servus!

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

Code:
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

Erfahrenes Mitglied
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.
 

Dario Linsky

Erfahrenes Mitglied
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. :)