Y
youpwnT
Gast
Hallo! 
Folgendes Problem treibt mich seit Stunden um:
Ich möchte eine Datei Zeile für Zeile auslesen und deren Inhalt in einer ArrayList halten.
Da das ganze später zu einer executable jar compiliert werden soll, möchte ich den relativen Dateipfad verwenden und keinen statischen.
Wenn ich die "././"-Methode verwende, funktioniert es im Interpreter, aber nicht in der .jar..
Das ist ein Problem, welches mit bekannt ist und deshalb habe ich mir, mit sehr viel Internet-Recherche, folgenden Code zusammen gefrickelt:
Der Code funktioniert wunderbar in meinem Interpreter, aber wieder nicht in der .jar-Datei.
Wenn ich einfach nur
angebe, dann meckert Java, da es keinen Konstruktor von FileReader kennt, der eine URL verwenden kann.
Bei ICONS und so weiter funktioniert das wunderbar, aber eben nicht beim FileReader.. Warum auch immer. Deshalb habe ich mir diese Lösung zusammen gebastelt, die die URL erst in einen String umwandelt, dann das "file:/" vorne weg schneidet und den String dann per URLDecoder umwandelt, damit ein normaler "C:/beispiel_ordner/beispiel_datei.txt"-Pfad raus kommt.
Hat jemand eine Idee woran es liegt oder wie ich es lösen kann?
Als weitere Info:
- Am Source-File liegt es nicht, das ist eine einfache *.txt in der untereinander eben einzelne Worte stehen.
Vielen Dank für eure Bemühungen!
Liebe Grüße
youpwnT
Folgendes Problem treibt mich seit Stunden um:
Ich möchte eine Datei Zeile für Zeile auslesen und deren Inhalt in einer ArrayList halten.
Da das ganze später zu einer executable jar compiliert werden soll, möchte ich den relativen Dateipfad verwenden und keinen statischen.
Wenn ich die "././"-Methode verwende, funktioniert es im Interpreter, aber nicht in der .jar..
Das ist ein Problem, welches mit bekannt ist und deshalb habe ich mir, mit sehr viel Internet-Recherche, folgenden Code zusammen gefrickelt:
Java:
public class LineTextReader
{
//Create the ArrayList<String> that will hold the output of the source-file:
ArrayList<String> result = new ArrayList<String>();
/**
* Constructor.
* @param name The name of the source-file.
*/
public LineTextReader(String name) {
try {
//Gets the relative path of the source file as an java.net.URL.toString() and cuts the 'file:/' at the beginning of the String:
String path = (getClass().getResource("/resources/" + name)).toString().substring(6);
//Decodes the String to a readable path:
path = URLDecoder.decode(path, "utf-8");
//Creates a BufferedReader / FileReader with the source-file:
BufferedReader in = new BufferedReader(new FileReader(path));
//The line that will be read:
String line = null;
//Reads the source-file line-by-line until it ends:
while ((line = in.readLine()) != null) {
//Adds the actual line to the result-array:
result.add(line);
}
} catch (IOException e) {
System.out.println("ERROR!");
}
}
}
Der Code funktioniert wunderbar in meinem Interpreter, aber wieder nicht in der .jar-Datei.
Wenn ich einfach nur
Java:
BufferedReader in = new BufferedReader(new FileReader(getClass().getResource("/resources/" + name));
Bei ICONS und so weiter funktioniert das wunderbar, aber eben nicht beim FileReader.. Warum auch immer. Deshalb habe ich mir diese Lösung zusammen gebastelt, die die URL erst in einen String umwandelt, dann das "file:/" vorne weg schneidet und den String dann per URLDecoder umwandelt, damit ein normaler "C:/beispiel_ordner/beispiel_datei.txt"-Pfad raus kommt.
Hat jemand eine Idee woran es liegt oder wie ich es lösen kann?
Als weitere Info:
- Am Source-File liegt es nicht, das ist eine einfache *.txt in der untereinander eben einzelne Worte stehen.
Vielen Dank für eure Bemühungen!
Liebe Grüße
youpwnT