2016-08-13 3 views
1

Ich bekomme diese Datei nicht gefunden Ausnahmen beim Ausführen der. JAR, aber nicht, wenn meine Anwendung in Netbeans ausgeführt wird. Hier sind die Fehlermeldungen, wobei ein aktuelles Verzeichnis oben gedruckt wird.Java .jar Datei nicht finden Systemdatei, wenn es da ist und den richtigen Pfad

adam @ Adam ~/Dropbox/linuxWorkspace/Netbeans/EveMarketCalculater/dist $ java -jar "EveMarketCalculater.jar"

Aktuelle sys dir:/home/adam/Dropbox/linuxWorkspace/Netbeans/EveMarketCalculater/dist

java.io.FileNotFoundException: file: /home/adam/Dropbox/linuxWorkspace/Netbeans/EveMarketCalculater/dist/EveMarketCalculater.jar /inputOutput/TypeID.csv (Keine solche Datei oder das Verzeichnis) bei java.io.FileInputStream .open0 (Native Methode) bei java.io.FileInputStream.open (FileInputStream.java:195) bei java.io.FileInputStream. (FileInputStream.java:138) bei java.io.FileInputStream. (FileInputStream.java:93) bei java.io.FileReader. (FileReader.java:58) bei inputOutput.csvParser.readFile (csvParser.java:54) bei inputOutput.csvParser. (csvParser.java:24) bei evemarketcalculater.EveMarketCalculater.main (EveMarketCalculater.java:39)

java.io.FileNotFoundException: file:/home/adam/Dropbox/linuxWorkspace/Netbeans/EveMarketCalculater/dist/EveMarketCalculater. Glas! /inputOutput/Regions.csv (Keine solche Datei oder das Verzeichnis) bei java.io.FileInputStream.open0 (Mutter Methode) bei java.io.FileInputStream.open (FileInputStream.java:195) bei java.io. FileInputStream. (FileInputStream.java:138) bei java.io.FileInputStream. (FileInputStream.java:93) bei java.io.FileReader. (FileReader.java:58) bei inputOutput.csvParser.readFile (csvParser.java:54) bei inputOutput.csvParser. (csvParser.java:24) bei evemarketcalculater.EveMarketCalculater.main (EveMarketCalculater.java:42)

java.io.FileNotFoundException: file:/home/adam/Dropbox/linuxWorkspace/Netbeans/EveMarketCalculater/dist/EveMarketCalculater. jar! /inputOutput/SolarSystems.csv (Keine solche Datei oder Verzeichnis) bei java.io.FileInputStream.open0 (Native Methode) bei java.io.FileInputStream.open (FileInputStream.java:195) bei java.io. FileInputStream. (FileInputStream.java:138) bei java.io.FileInputStream. (FileInputStream.java:93) bei java.io.FileReader. (FileReader.java:58) bei inputOutput.csvParser.readFile (csvParser.java:54) bei inputOutput.csvParser. (csvParser.java:24) bei evemarketcalculater.EveMarketCalculater.main (EveMarketCalculater.java:45)

java.io.FileNotFoundException: file:/home/adam/Dropbox/linuxWorkspace/Netbeans/EveMarketCalculater/dist/EveMarketCalculater. Glas! /inputOutput/MyOrders.csv (Keine solche Datei oder das Verzeichnis) bei java.io.FileInputStream.open0 (Mutter Methode) bei java.io.FileInputStream.open (FileInputStream.java:195) bei java.io. FileInputStream. (FileInputStream.java:138) bei java.io.FileInputStream. (FileInputStream.java:93) bei java.io.FileReader. (FileReader.java:58) bei inputOutput.csvParser.readFile (csvParser.java:96) bei inputOutput.csvParser. (csvParser.java:29) bei evermarketcalculator.EveMarketCalculator.main (EveMarketCalculator.java: 48)

Hier einige Quellcode, wie ich diese Dateien am Zugriff auf:

public final void readFile(String file, int index1, int index2) 
{ 
    BufferedReader br = null; 
    String line = ""; 
    String cvsSplit = ","; 
    idList = new ArrayList(); 

    try 
    { 
     URL url = csvParser.class.getResource(file); 

     br = new BufferedReader(new FileReader(url.getPath())); 

     while((line = br.readLine()) != null) 
     { 
      String[] item = line.split(cvsSplit); 

      idList.add(item[index1].replace("\"","")); 
      idList.add(item[index2].replace("\"","")); 
     } 
    } 
    catch(Exception ex) 
    { 
     ex.printStackTrace(); 
    } 

    if(br != null) 
    { 
     try 
     { 
      br.close(); 
     } 
     catch(Exception ex) 
     { 
      ex.printStackTrace(); 
     } 
    } 

} 


    public static void writeMyOrders() 
{ 
    URL url = csvParser.class.getResource("MyOrders.csv"); 

    FileWriter w = null; 
    csvWriter c = null; 

    try 
    { 
     // Empty file cotents 
     PrintWriter writer = new PrintWriter(url.getPath()); 
     writer.close(); 

     w = new FileWriter(url.getPath()); 

     c = new csvWriter(); 
    } 
    catch(Exception ex) 
    { 
     ex.printStackTrace(); 
    } 

    for(int i = 0; i < myOrders.size(); i++) 
    { 
     try 
     { 
      c.writeLine(w, myOrders.get(i)); 
     } 
     catch(Exception ex) 
     { 
      ex.printStackTrace(); 
     } 
    } 

    if(w != null) 
     try 
     { 
      w.close(); 
     } 
     catch(Exception ex) 
     { 
      ex.printStackTrace(); 
     } 

} 

Jede Ahnung, warum dies nicht funktioniert? Es verfolgt offensichtlich den richtigen Dateipfad und die Dateien befinden sich innerhalb der .jar-Datei in diesen Pfaden. Ich laufe in einer Linux-Befehlszeile, wenn das wichtig ist.

Hier ist der Beweis, dass die Dateien existieren.

picture of .jar directory

Antwort

0

Versuchen Sie, die folgende Anweisung während BufferedReader erstellen:

br = new BufferedReader(new InputStreamReader(csvParser.class.getResourceAsStream(file))); 

Class.getResource() kehren Sie die URL während Class.getResourceAsStream() gibt Ihnen InputStream von wo aus Sie den Dateiinhalt direkt lesen kann.

Erklärung Von der Fehlermeldung ist es sichtbar, dass die Anwendung nicht in der Lage ist file:/home/adam/Dropbox/linuxWorkspace/Netbeans/EveMarketCalculater/dist/EveMarketCalculater.jar!/inputOutput/TypeID.csv die Datei zu finden. Um das zu überprüfen, können Sie versuchen, die erwähnte Datei mit einer anderen Anwendung wie gedit oder chrome oder vi zu öffnen. Wenn Sie es öffnen können, kann Ihre Anwendung das auch tun.

Sie haben einen solchen Pfad von der URL zurückgegeben von getResource(). Wenn es getResourceAsStream() ist, werden Sie mit einer mit der Ressource versehen, die Sie suchen.

Sie haben die Möglichkeit, die Datei in einer JAR-Datei zu aktualisieren. Haben Sie nicht von mir versucht, aber Sie diese zu Can a Jar File be updated programmatically without rewriting the whole file?

+0

Dies funktioniert beziehen. Wie würde ich dies tun, um in diese Dateien zu schreiben? Auch wenn Sie ein wenig mehr erklären könnten, warum das Erhalten einer Ressource als ein Strom funktioniert, aber es mit Leser holend, würde ich es nicht schätzen. – user3471443

+0

In Bezug auf das Schreiben, speziell etwas, das für meine zweite Methode im ursprünglichen Beitrag gilt. Ich habe die ursprünglichen Fehler hinter mir gelassen und es fällt jetzt der gleiche Fehler, wenn ich dort angekommen bin. Der PrintWriter wird verwendet, um den Dateiinhalt zu löschen, und dann verwende ich den FileWriter, um den Dateiinhalt zu aktualisieren – user3471443

0

Versuchen

br = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream(file))); 
Verwandte Themen