2012-04-10 13 views
1

Ich bin neu in Java. Ich habe versucht, eine Dateikopierer Anwendung mit den grundlegenden FileInputStream und und bufferedInputStream und bufferedOutputStream zu tun. Ich benutzte einen Fortschrittsbalken, um den Fortschritt anzuzeigen und es funktionierte. Alles war gut. Ich habe die catch-Klausel FileNotFoundException hinzugefügt, um den Fehler zu melden. Als ich versuchte, eine Datei von einer beschädigten CD zu kopieren, kopierte ich sie gewissermaßen und blieb stehen. Wie erkenne ich die read errors? Gibt es eine Fangklausel? Bitte hilf mir.Wie erkennen Sie Lesefehler in FileCopying in Java?

+0

Wird zur Laufzeit eine Ausnahme ausgelöst? –

+0

Es gibt eine 'IOException', die ausgelöst werden sollte, wenn eine der IO-Operationen fehlschlägt. Sehen Sie sich http://docs.oracle.com/javase/6/docs/api/java/io/IOException.html an, um zu erfahren, wie IOExceptions funktionieren. – twain249

+0

Nein. Es stand noch für eine halbe Stunde –

Antwort

2

Es gibt keine echte Lösung dafür. Java benötigt das Betriebssystem, um Low-Level-Datei-E/A durchzuführen. Wenn das Betriebssystem lange Zeit blockiert, während es versucht, eine beschädigte Datei zu lesen, kann die Java-Anwendung nichts dagegen tun.

Wie erkenne ich die Lesefehler? Gibt es eine Fangklausel?

Wenn/wenn die Operation read schließlich fehlschlägt, erhalten Sie eine IOException einer Art. Das Hinzufügen eines Caches für die Ausnahme würde jedoch nichts zum Aufheben der Blockierung der blockierten Leseanforderung tun.

Wiederherstellen von Daten von beschädigten Festplatten ist nicht die Art von etwas, was Sie in Java versuchen sollten. Sie müssen eine native Anwendung schreiben, die auf Datenträgerebene auf das Plattengerät zugreifen kann. Oder besser: Verwenden Sie ein vorhandenes Tool zur Datenwiederherstellung.

+0

Ich versuche nicht, Daten wiederherzustellen. Ich möchte nur den Lesefehler in einem Meldungsfeld melden. –

+0

Wenn Sie eine bekannte beschädigte CD haben, sollten Sie nicht versuchen, sie zu lesen. Aber wie gesagt, es gibt keine gute Lösung. Das Beste, was Sie tun könnten, wäre einen Watchdog-Thread zu erstellen, der nach dem Thread Ausschau hält, der beim Lesen keine Fortschritte macht. Aber sobald es das entdeckt, gibt es nichts, was es tun kann, um sich zu erholen. –

+0

Ist es möglich, den Fehler mindestens dem Benutzer zu melden? –

0

Wenn Sie tun, um Ihre read() und write() Aussagen auf FileInputStream und FileOutputStream Objekte (Ltg.), Ein IOException aus dem nativen Teil entstehen kann, wenn ein Problem beim Lesen gibt es oder aus/in das Dateisystem zu schreiben. Sie können es auf die gleiche Weise erfassen, wie Sie die FileNotFoundException abgefangen haben, und sehen Sie in der Nachricht weitere Informationen zu dem spezifischen Fehler.