Exceptions und IO

Status
Nicht offen für weitere Antworten.

Hellweg

Mitglied
Ich habe eine frage ob mir jemand dort weiter helfen kann ich weiß nicht ob das richtig ist was ich gemacht habe.

Ich bitte um Hilfe.

Also :

Es sollen die Abfragen ergänzt werden und eine adäquate Behandlung der möglicherweise auftretenden Standardexceptions an allen relevanten Stellen.

Java:
import java.io.*;

public class FileCopy
{
static void copy( InputStream in, OutputStream out ) throws IOException
{
// Hier findet der eigentliche Kopiervorgang statt, diese Methode ist
//nicht Gegenstand der Betrachtung …
}
static void copyFile( String src, String dest )
{

FileInputStream fis = null;
FileOutputStream fos = null;


fis = new FileInputStream(src );
fos = new FileOutputStream( dest );


copy( fis, fos );


if ( fis != null )



if ( fos != null )


}

Ich habe auch einen Lösungsansatz weiß aber nicht ob das so richtig ist oder ob noch etwas fehlt.

Meine Lösung :

Java:
if ( fis != null )
try{
       fis.close();
} catch(IOException e){

   ; }



if ( fos != null )
ry{
       fos.close();
} catch(IOException e){

   ; }
 

Marco13

Top Contributor
"copy" und der Konstruktor von File*Stream können auch eine IOException werfen. Und ganz allgemein:

Eine Exception abfangen und nicht darauf reagieren ist so ziemlich das ungünstigste, was man machen kann. Wenn man das Programm startet ist es irgendwann zuende, und man weiß nicht, ob etwas schiefgegangen ist oder nicht.
 

Hellweg

Mitglied
Hi danke schon mal für deine Hilfe. Aber das ist doch nicht nötig wo rauf soll es den reagieren oder was meinst du??
 
S

SlaterB

Gast
auf einen Fehler immer reagieren, im einfachsten Falle
throw new RuntimeException(e);

sonst tritt ein Fehler auf und wirst nicht informiert
 

tfa

Top Contributor
Du verschluckst die Exceptions einfach. Generell ist das böse. Man sollte sie mindestens loggen oder weiterwerfen. Davon abgesehen hast du natürlich recht, auf eine IOException beim Schließen eines Streams kann man sonst nicht sinnvoll reagieren.
 

Shulyn

Bekanntes Mitglied
Wie wäre es wenn du einen ExceptionHandler benutzt?

Java:
public Class ExceptionHandler {
	
	// Exception behandeln
	public void handleException(Throwable exception, String additionalInfos){
          // exception behandeln wie du willst
        }

     // Warnings behandeln
    public void handleWarning(String message){
     // warnings behandeln wie du willst
    }
}

// --- in deiner classe ---

ExceptionHandler excHandler = new ExceptionHandler();

// in der Methode

try {
// irgendwas
}
catch (Throwable th) {
excHandler .handleException(th, "infos");
// mach noch was
 }

So kannst du alle Exceptions oder Warnings zum ExceptionHandler "schieben" und dort dann behandeln / Loggen oder oder oder
-------
So kannst du dann z.B immer gleich auf IOExceptions reagieren, oder dein Program beim auftreten einer RuntimeException "sicher" beenden..
Und du sparst dir die Arbeit in jedem Try-Catch Blog gezielt die Exception zu behandeln


//EDIT -Habe Exception durch Throwable ersetzt :)
 
Zuletzt bearbeitet:

Hellweg

Mitglied
Hi danke für euere Hilfe!!
Das ist eine gute lösung Shulyn aber es solle nur an den bestimmten stellen eine exception gesetzt werden.
 

Hellweg

Mitglied
Ich habs mal so gelöst.

Java:
import java.io.*;
 
public class FileCopy
{
static void copy( InputStream in, OutputStream out ) throws IOException
{
// Hier findet der eigentliche Kopiervorgang statt, diese Methode ist
//nicht Gegenstand der Betrachtung …
}
static void copyFile( String src, String dest ) throws IOException, FileNotFoundException{
{
 
FileInputStream fis = null;
FileOutputStream fos = null;
 
try{ 
fis = new FileInputStream(src );
fos = new FileOutputStream( dest );
 }catch (FileNotFoundException e){}
 
copy( fis, fos );
 
 if ( fis != null )
try{
       fis.close();
} catch(IOException e){ }
 
 
 
if ( fos != null )
ry{
       fos.close();
} catch(IOException e){ }

 }
} [/Java]
 

Hellweg

Mitglied
Ich hab aber auch nochmal eine andere Frage.

Wie mache ich, dass die Methode copyFile soll eine IdentException zurückgeben, wenn die übergebenen Strings identisch sind. Es soll dafür eine eigene Klasse IdentException geschrieben werdenbund bauen Sie diese Exception in die obige Anwendung ein. ??

LG Stefan
 

Hellweg

Mitglied
Das eine Problem hab ich denke ich gelöst.

die Exception in das obige Programm einzubauen.

Java:
if(src.equals(dest))
    throw new IdentException("same filenames");

oder gibts eine bessere Variante.

Jetzt ist die frage wenn die übergebenen Strings identisch sind, soll dafür eine eigene Klasse IdentException geschrieben werden. Der Galileo Link hat mir nicht weiter geholfen.
 

Marco13

Top Contributor
Du verschluckst die Exceptions immernoch. Mach' wenigstens eine Ausgabe, und springe dann aus der Methode raus, sonst kracht's da ohne Ende. Und die zweite Frage... versuch's mal, und poste dann ggf. den Code mit einer Frage die ... präziser ist als "Wie geht das?".

EDIT: Da hätte ich wohl mal reload drücken sollen :oops:
 

Shulyn

Bekanntes Mitglied
Ok jetzt habe ich dich besser verstanden. Ich hatte nur das hier gelesen.
Es sollen die Abfragen ergänzt werden und eine adäquate Behandlung der möglicherweise auftretenden Standardexceptions an allen relevanten Stellen.

Custom Exceptions würde ich nur benutzen wenn es wirklich nötig ist.
Hier mal dein Quelltext + ExceptionHandler.

Java:
/** Deine FileCopy Classe */


package //dein paclage

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import ExceptionHandler;  // muss importiert werden.


public class FileCopy {

       private ExceptionHandler handler = new ExceptionHandler();
        
        void copy( InputStream in, OutputStream out ) throws IOException {
            // Hier findet der eigentliche Kopiervorgang statt, diese Methode ist
            //nicht Gegenstand der Betrachtung …
        }
        void copyFile( String src, String dest ) throws IOException, FileNotFoundException {

            FileInputStream fis = null;
            FileOutputStream fos = null;
     
            try { 
                fis = new FileInputStream(src );
                fos = new FileOutputStream( dest );
            }
            catch (FileNotFoundException e) {
                handler.handleException(e,"copyFile");
                return;
            }
            try {
                copy( fis, fos );
            }
            catch (IOException e) {
                handler.handleException(e, "copy");
                return;
            }
            finally {
            try {
                if ( fis != null ) 
                    fis.close();
                if ( fos != null )
                    fos.close();
            }
            catch (IOException e) {
                handler.handleException(e, "close");
                return;
            }
            }
        }
}

Java:
/** Nochmal der ExceptionHandler */
public Class ExceptionHandler {
    
    // Exception behandeln
    public void handleException(Throwable th, String infos){
                  String neu = th.toString();
                   System.out.print("Eine Exception ist in der Methode " + infos + "aufgetreten");
                   System.out.print(neu);
// exception behandeln wie du willst
// das nur beispiel        
}
 
     // Warnings behandeln
    public void handleWarning(String message){
     // warnings behandeln wie du willst
    }
}


So sparst dir ein parr try catch blöcke... und hast die Exceptionbehandlung gleich mit drin..
 
Zuletzt bearbeitet:
S

SlaterB

Gast
die Streams sollten wohl auch im Falle einer Exception besser geschlossen werden,
mit finally geht das einigermaßen
 

tfa

Top Contributor
Noch nicht 100%ig sicher. Wenn beim Schließen von fis eine IOEx fliegt, bleibt fos offen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Jose05 Umgang mit Exceptions in einen Programm Allgemeine Java-Themen 2
M Exceptions - wann / wie verwenden? Allgemeine Java-Themen 4
W Exceptions behandeln Allgemeine Java-Themen 16
Kirby.exe Exceptions erklärt Allgemeine Java-Themen 5
L Operatoren Java Reflections: Alle Methoden einer Klasse aufrufen ohne Exceptions Allgemeine Java-Themen 5
E Java Editor Problem mit 2er Exceptions Allgemeine Java-Themen 12
B Maven Keycloak library wirft exceptions nach maven package Allgemeine Java-Themen 1
J Exceptions Allgemeine Java-Themen 1
Z Java Exceptions - Auf leeres Feld prüfen Allgemeine Java-Themen 10
E Exceptions abfangen und dann Programm stoppen - aber wie? Allgemeine Java-Themen 2
L Nullpointer Exceptions werden nicht angezeigt Allgemeine Java-Themen 5
V Exceptions Allgemeine Java-Themen 2
G Exceptions mit jre 7u40 Allgemeine Java-Themen 2
S Best Practice verschiedene Exceptions fangen und neue Exception erzeugen Allgemeine Java-Themen 11
E LookAndFeel Exceptions bei UIManager.setLookAndFeel Allgemeine Java-Themen 4
W JavaDoc Runtime-Exceptions: Wie sinnvoll anzeigen? Allgemeine Java-Themen 14
C Threads und Exceptions Allgemeine Java-Themen 7
B Webstart Exceptions Allgemeine Java-Themen 7
R Threads Exceptions von Threads abfangen im ThreadPool Allgemeine Java-Themen 5
S Runtime Exceptions in eine Datei schreiben Allgemeine Java-Themen 7
G Internationalisierung von Exceptions Allgemeine Java-Themen 5
J JUnit - werfen von Exceptions testen Allgemeine Java-Themen 17
F Alle Exceptions abfangen Allgemeine Java-Themen 4
B Alle Exceptions auf einmal abfangen Allgemeine Java-Themen 4
G log4j - Behandlung nicht explizit abgefangener Exceptions Allgemeine Java-Themen 5
B Logging von Exceptions Allgemeine Java-Themen 7
G Designfrage: Exceptions in Konstruktoren Allgemeine Java-Themen 7
I Exceptions - weder catch- noch finally-Klausel funktioniert Allgemeine Java-Themen 12
M Verwendung von unchecked exceptions & bereits vorhandenen exceptions was priorisieren Allgemeine Java-Themen 3
hdi Verhalten bei nicht behandelten Exceptions Allgemeine Java-Themen 2
B Exceptions? Allgemeine Java-Themen 4
D Throws Exceptions Allgemeine Java-Themen 14
M Verständnisfrage Exceptions Allgemeine Java-Themen 2
V Exceptions als Fehlerbehandlung "missbrauchen"? Allgemeine Java-Themen 10
DEvent Wie behandelt man Exceptions in Iterator? Allgemeine Java-Themen 2
J Verständnisfrage zu exceptions Allgemeine Java-Themen 3
A Junit Exceptions testen Allgemeine Java-Themen 3
R Loading-Thread und Exceptions abfangen. Allgemeine Java-Themen 4
P Exceptions dokumentieren. Allgemeine Java-Themen 6
G Exceptions weiterwerfen Allgemeine Java-Themen 2
T Generics und Exceptions Allgemeine Java-Themen 6
P Exceptions throw Allgemeine Java-Themen 6
F Wann und wie Exceptions einsetzen? Allgemeine Java-Themen 13
J Method.invoke -> Exceptions der Funktion abfangen Allgemeine Java-Themen 5
T Frage zu Exceptions Allgemeine Java-Themen 3
G Java-Exceptions werden nicht ganz angezeigt. Wo ändern? Allgemeine Java-Themen 3
J Probleme mit Exceptions Allgemeine Java-Themen 11
R Exceptions mit aktuellen Programminformationen ausgeben? Allgemeine Java-Themen 2
märliprinz com.sap.dbtech.jdbc.exceptions.JDBCDriverException Allgemeine Java-Themen 2
G Alle Exceptions loggen Allgemeine Java-Themen 4
G Frage zu Exceptions Allgemeine Java-Themen 6
M err oder alle Exceptions eines Programms abfangen Allgemeine Java-Themen 4
G Exceptions ohne Zeilennummer (Unknown Source) Allgemeine Java-Themen 8
T Exceptions im statischem Klassencode Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben