2012-04-11 4 views
1

Wie kann ich diesen Fehler beheben? Ich konnte keine Lösung mit verschiedenen Pfaden finden, auch nicht manuell. Bitte erläutern Sie, wie Sie ein Bild mit dem absoluten Pfad in das gepufferte Bild einlesen.IOException: Eingabedatei kann nicht gelesen werden. Ich konnte keine Lösung finden mit verschiedenen Pfaden, auch manuell

private BufferedImage[] image = new BufferedImage[9]; 
private int imageNo = 0; 
private Boolean draw = false; 
private int drawType; 
private String [] realtivePath; 
private String [] absolutePath; 
//============================================================================= 

public DrawPanel() { 

    int i,j; 
    absolutePath = new String[9]; 
    realtivePath = new String []{"B_Pictures\\Burj Khalifa.jpg", "B_Pictures\\Taipei 101.jpg", "B_Pictures\\Willis Tower.jpg", 
     "B_Pictures\\Empire State Building.jpg", "B_Pictures\\Chrysler Building.jpg", 
     "B_Pictures\\Woolworth Building.jpg", "B_Pictures\\Met Life Tower.jpg", 
     "B_Pictures\\Singer Building.jpg", "B_Pictures\\Philadelphia City Hall.jpg"}; 
    //====================================================================== 
    for(i = 0;i < 9; i++) 
    { 
     absolutePath[i] = new File(realtivePath[i]).getAbsolutePath(); 
     System.out.println("Path is: "+absolutePath[i]); 
    } 
    //======================================================================= 
    try { 
     for (j = 0; j < 9; j++) { 
      image[j] = ImageIO.read(new File(absolutePath[j])); //<-- can't read absolute path! 
     } 
    }catch (IOException e) { 
     e.printStackTrace(); 
     //System.out.println("Error reading file"); 
    } 
+0

Statt reasking, Ihre Frage zu aktualisieren und für einige Aufmerksamkeit zu bitten. –

+0

Soll ich diesen dann entfernen? Danke für die Beratung. –

+1

Sie sollten mindestens den Fehler, den Sie erhalten, und die Ausgabe, die Ihre System.out.println erstellt, einbeziehen. –

Antwort

4

Offensichtlich sind Ihre absoluten Pfade falsch. Sie lösen die relativen Pfade basierend auf dem Verzeichnis auf, in dem Sie Ihre Java-Anwendung ausführen. anscheinend sind das die falschen relativen Pfade (oder du führst die App an einem anderen Ort als du denkst).

UPDATE:

als Klarstellung, macht File.getAbsolutePath() ein relativer Pfad absolut, wenn es zur Zeit relativ ist. Dies ist eine rein textuelle Änderung und impliziert keine Gültigkeit für den resultierenden absoluten Pfad. z.B. Wenn Sie einen relativen Pfad "foo/bar" haben und Sie ihn basierend auf dem aktuellen Verzeichnis "/ blah" absolut machen, ist Ihr resultierender absoluter Pfad "/ blah/foo/bar". das bedeutet nicht, dass "/ blah/foo/bar" ein gültiger Pfad ist.

Hier ist eine einfache Möglichkeit, Ihren Code zu überprüfen:

System.out.println("Path is: "+absolutePath[i] + ", isReadable " + new File(absolutePath[i]).canRead()); 
+0

Können Sie es basierend auf der Lösung erklären. Wie können sie falsch sein, da sie von einer Methode generiert werden, die den absoluten Pfad zurückgibt? –

+0

@Edi - aktualisiert meine Antwort – jtahlborn

+0

Ich habe die erste Zeichenfolge mit relativen Pfad zur Verfügung gestellt, die ist: B_Pictures \ Burj Khalifa.jpg das ist ein Paket in Java Netbeans, die alle JPEG-Bilder enthält. Basierend auf diesem relativen Pfad habe ich die getAbsolutePath() -Methode verwendet, um den absoluten Pfad zu erhalten, der wie folgt ist: C: \ Benutzer \ foo \ Desktop \ Sorting_Ass4 \ B_Pictures \ Burj Khalifa.jpg zum Beispiel. Auch wenn Sie keinen absoluten Pfad erhalten und ihn stattdessen mit der Escape-Sequenz hardcoded verwenden, funktioniert es nicht. Was ist mein absoluter Weg? –

Verwandte Themen