2017-12-29 17 views
1

Ich bin mitLesetextdatei arbeitet in IDE, aber nicht in .jar

File file = new File("res/movies.txt"); 

Text aus einer gebündelten TXT-Datei zu lesen. Mein Code funktioniert perfekt, wenn das Programm in IntelliJ IDEA ausgeführt wird, aber wenn ich eine .jar-Datei erstelle und sie ausführe, wird der Fehler "Datei nicht gefunden" angezeigt. Was kann ich tun, damit der Code sowohl in der IDE als auch in der JAR-Datei funktioniert?

+1

Wenn die Datei abgelegt wird als schreibgeschützt „Ressource“ im Klassenpfad (in das Glas), können Sie es als InputStream wie Jon Skeet Antwort bekommen. Datei ist nur für das Dateisystem des Betriebssystems. –

Antwort

8

Sie benötigen die Datei als Ressource zu laden. Sie können oder ClassLoader.getResourceAsStream verwenden; Jeder gibt eine InputStream für die Ressource zurück.

Sobald Sie eine InputStream haben, wickeln Sie es in eine InputStreamReader (unter Angabe der entsprechenden Codierung), um Text daraus zu lesen.

Wenn Sie brauchen, um manchmal aus einer beliebigen Datei lesen und manchmal von einer Ressource zu lesen, ist es wahrscheinlich am besten, getrennte Wege verwenden entweder ein FileInputStream für die Datei oder eine der Methoden erstellen oben für eine Ressource, dann mache alles danach auf die gleiche Weise.

Hier ist ein Beispiel, das jede Zeile von resources/names.txt druckt, die in derselben JAR-Datei als Code gebündelt werden sollen:

package example; 

import java.io.*; 
import java.nio.charset.*; 

public class Test { 
    public static void main(String[] args) throws IOException { 
     try (BufferedReader reader = new BufferedReader(
      new InputStreamReader(
       Test.class.getResourceAsStream("/resources/names.txt"), 
       StandardCharsets.UTF_8))) { 
      String line; 
      while ((line = reader.readLine()) != null) { 
       System.out.println(line); 
      } 
     } 
    } 
} 
+0

Ich kämpfe um zu verstehen, was Sie einige Orte hier bedeuten. Könnten Sie Ihren Beitrag bearbeiten und den eigentlichen Code hinzufügen? Vielen Dank. – Mikkel

+0

@Mikkel: Ich habe ein Beispiel hinzugefügt, obwohl ich vermutet habe, dass Sie mit ein wenig Forschung für sich selbst haben können. –

-4

versuchen

Datei file = new File ("res/movies.txt") zu ändern;

zu

Datei file = new File ("res/movies.jar");

dies natürlich davon ausgegangen, der Dateiname movies.jar ist

+0

Nein, der Punkt ist, dass die Textdatei * innerhalb * der JAR-Datei liegt. –

+0

Entschuldigung falsch gelesen die Frage – Kip242

Verwandte Themen