2016-06-09 2 views
-2

Ich lerne, wie man Datei und Verzeichnis in Java mit diesem Code erstellen. Auf der ERROR LINE bekomme ich Fehler als "IOException wird nie in diesem Block geworfen".
Woher weiß ich, welche Funktion welche Art von Exception auslöst? Oder wenn ich nicht sicher bin, sollte ich generische Exception in jedem catch-Block verwenden. Art der Ausnahme im Catch-Block

public class FileTest { 
    public static void main(String[] args) { 
     //file creation 
     boolean flag = false; 
     File file = new File("/IdeaProjects/JavaCode/jstest.txt"); 
     try { 
      flag = file.createNewFile(); 
     }catch (IOException e){ 
      e.printStackTrace(); 
     } 
     System.out.println("file path is : " + file.getPath()); 

     //dir creation 
     boolean dirFlag = false; 
     File fileDir = new File("/IdeaProjects/JavaCode/js"); 
     try{ 
      dirFlag = fileDir.mkdir(); 
     }catch (IOException e){//ERROR LINE 
      e.printStackTrace(); 
     } 
     if(dirFlag) 
      System.out.println("created"); 
     else 
      System.out.println("exist"); 
    } 
} 
+0

Sie haben nur einen Methodenaufruf in Ihrem try-Block. Lies das Javadoc dieser Methode, um zu sehen, was es werfen kann. – Eran

Antwort

1

Die java.io.File#mkdir Methode deklariert nur SecurityException zu werfen - siehe API.

ist ein RuntimeException und muss nicht abgefangen werden, obwohl Sie möchten, je nach Kontext (siehe API).

Fangen allgemeinen java.lang.Exception in jedem catch Block ist absolut keine empfohlene Praxis, obwohl Sie manchmal müssen (nicht in Ihrem vorliegenden Fall aber).

Siehe here für einige SO Literatur zu diesem Thema.

+0

Das bedeutet, ich muss den Typ der Ausnahme sehen, die von einer Funktion der Java-API ausgelöst wird, und schreibe entsprechend. –

+0

@ user3747720 na ja, eine API zu konsumieren bedeutet zu verstehen, was sie tut oder tun soll. Dies gilt im Allgemeinen für jede Programmiersprache und jeden gegebenen Kontext. – Mena

0
  • Erinnern Sie sich, welche Methoden Ausnahmen auslösen und welche Ausnahmen sie sind.
  • Überprüfen Sie die Dokumentation, wenn Sie glauben, dass eine Methode eine Ausnahme auslösen kann.
  • Versuchen Sie einfach, den Code zu kompilieren und beheben Sie die Fehler, die der Compiler löst (Sie werden Ihnen sagen, welche Ausnahmen von welcher Methode ausgelöst werden, wenn der try-catch-Block fehlt).

Verfahren in Frage (File.mkdir()) wirft einen SecurityException die nicht überflüssig macht gefangen werden (Sie können, wenn es sein muss), da es eine ungeprüfte RuntimeException ist.

java.io.File: https://docs.oracle.com/javase/7/docs/api/java/io/File.html#mkdir()

Security: https://docs.oracle.com/javase/7/docs/api/java/lang/SecurityException.html

0

JLS Section 11.2 Zitiert:

Es ist ein Fehler bei der Kompilierung, wenn eine catch-Klausel E1 Ausnahmeklasse überprüft fangen kann und es ist nicht der Fall, dass der try-Block, der der catch-Klausel entspricht, eine überprüfte Ausnahmeklasse auslösen kann, die eine Unterklasse oder Oberklasse von E1 ist, außer E1 ist Exception oder eine Oberklasse von Exception.

Wenn keine Methode, die Sie im try-Block aufrufen erklärt, dass es throws IOException (und Sie nicht throw new IOException(..) direkt entweder), ist es ein Fehler bei der Kompilierung, wenn Sie versuchen, eine IOException zu fangen.