Verzeichnisse und Dateien in JAR Files

Status
Nicht offen für weitere Antworten.

babuschka

Top Contributor
Hallo,

ich habe die FAQ bezüglich dem Erstellen von JAR Files gelesen. Mit dem normalen Erstellen habe ich ohnehin keine Probleme, da das Eclipse ganz gut macht.

Ich benutze die Funktion "Build Fat Jar". Und wenn ich danach mit dem Explorer (Linux) in das JAR hineinschaue, sind auch alle Unterverzeichnisse meines Projektordners, sowie Verzeichnisse meiner verlinkten Libraries vorhanden.

In meinem Programm selbst greife ich auf eine Datei zu, welche in einem Unterverzeichnis (im Projektordner) liegt. Im Programm habe ich das fest verdratet, aber nicht absolut, sondern relativ zu meinem Projektverzeichnispfad:
"NameDesUnterverzeichnisses/Dateiname.xml"

Starte ich jetzt das Jar außerhalb des Projekt Ordners, so meckert er, dass er die Datei nicht findet. Aber das Verzeichnis und die Datei sind doch mit in dem JAR integriert?!
Wenn ich in dem Verzeichnis wo sich das JAR befindet wieder die Unterordner mit den Dateien anlege, dann funktioniert es. Aber dann ist es ja doppelt vorhanden, einmal in dem JAR und noch mal in den Unterordnern!

Könnt ihr mir weiterhelfen?

Grüße
Sven
 

babuschka

Top Contributor
Hmm wie gesagt, wenn ich es aus Eclipse starte oder das JAR direkt im Projektordner, dann geht es ohne Probleme.

Ich arbeite mit System.getProperty("file.separator"), um es Systemunabhängig zu machen.

Der Code:
Code:
   /**
    * This method reads material data from an XML file.
    * The data connects the Material with the Roughness.
    * 
    * From "Java ist auch eine Insel"
    */
   private void initializeMaterialData()
   {
	    try
	    {
		  String mySeparator = new String();
		  mySeparator = System.getProperty("file.separator");
	      XMLInputFactory factory = XMLInputFactory.newInstance();
	      XMLStreamReader parser = factory.createXMLStreamReader( new FileInputStream( "GeneralFiles" + mySeparator + "PipeRoughness.xml" ) );
	      
	      StringBuilder spacer = new StringBuilder();
	      
	      while ( parser.hasNext() )
	      {
	        switch ( parser.getEventType() )
	        {
	     
	          case XMLStreamConstants.START_ELEMENT:
	           spacer.append( "  " );
	            System.out.println( spacer + "START_ELEMENT: " + parser.getLocalName() );
	            if (parser.getLocalName().equalsIgnoreCase("pipe")){
	            for ( int i = 0; i < parser.getAttributeCount(); i++ )
	              System.out.println( spacer + "  Attribut: "
	                                  + parser.getAttributeLocalName( i )
	                                 + " Wert: " + parser.getAttributeValue( i ) );
	            MaterialToRoughness.put(parser.getAttributeValue(0),
	            		Double.valueOf(parser.getAttributeValue(1)));
	            }
	          break;
	          default:
	          break;
	        }
	        parser.next();
	      }
	    }
	    catch ( IOException e )
	    {
	      e.printStackTrace();
	    }
	    catch ( XMLStreamException e )
	    {
	      e.printStackTrace();
	    }
	  }
 

gex

Bekanntes Mitglied
Also die Datei die du lesen möchtest ist im ClassPath drin?!

Habs jetzt nicht getestet, aber wie wärs mit sowas?
Code:
InputStream is = getClass().getResourceAsStream("/GeneralFiles" + mySeparator + "PipeRoughness.xml");
XMLInputFactory factory = XMLInputFactory.newInstance();
         XMLStreamReader parser = factory.createXMLStreamReader( is) );

Das heisst er sucht die Datei im ClassPath und nicht im Dateisystem.
 

babuschka

Top Contributor
Das hat funktioniert. :)

Da bei deiner Angabe jetzt wieder ein "/" davor steht, sieht er also quasi das .jar Files als Wurzelverzeichnis?

Man muss also immer mit getResource Arbeiten, wenn man auf etwas in dem JAR file zugreifen will?

Class Path heißt also das Verzeichnis wo meine ganzen Sourcen liegen?

Wie würde man das denn ordentlich strukturieren. Oder ist es generell schlechte Praxis Dateien, die eingelesen werden, mit in das JAR zu packen? Es ist schön praktisch, weil man nur eine Datei braucht in der alles steckt, was das Programm benötigt.

Grüße
Sven
 

babuschka

Top Contributor
Unter Linux geht es und unter Windows nicht, ich denke mal, dass es an dem root Zeichen "/" liegt. Nur wie geht es unter Windows? Mit mySeparator (siehe oben) ging es ebenfalls nicht.
 

babuschka

Top Contributor
es lag daran, dass man wohl innerhalb des JARs immer "/" als Separator verwenden kann. Also ohne die dynamische betriebssystemabhängige Bestimmung, egal ob es unter Windows oder Linux läuft.

Schönen Abend
Sven
 
M

maki

Gast
>> es lag daran, dass man wohl innerhalb des JARs immer "/" als Separator verwenden kann. Also ohne die dynamische betriebssystemabhängige Bestimmung, egal ob es unter Windows oder Linux läuft.

Das liegt daran, dass packetnamen unabhängig vom OS sind.
Mit anderen Worten, du navigierst nicht im Dateisystem sondern im Classpath.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Verzeichnisse und Dateien kopieren Java Basics - Anfänger-Themen 3
M Dateien/Verzeichnisse anlegen Java Basics - Anfänger-Themen 10
S Datenbänke und Verzeichnisse Java Basics - Anfänger-Themen 7
I 1) Laufwerke auslesen 2) Verzeichnisse von Laufwerke auslesen Java Basics - Anfänger-Themen 2
R Verzeichnisse rekursiv nach Dateiduplikaten durchsuchen Java Basics - Anfänger-Themen 5
Z Verzeichnisse mit Inhalt löschen löschen Java Basics - Anfänger-Themen 7
A Verzeichnisse nach Datei / Ordner durchsuchen Java Basics - Anfänger-Themen 11
P Text in Verzeichnisse suchen Java Basics - Anfänger-Themen 4
L Verzeichnisse mit Inhalt verschieben auf UNIX Java Basics - Anfänger-Themen 5
H BITTE SCHNELLE HILFE - VERZEICHNISSE DURCHGEHEN Java Basics - Anfänger-Themen 2
M Verzeichnisse rekursiv durchlaufen und dann RegEx Java Basics - Anfänger-Themen 6
T Zugriff auf geschützte Verzeichnisse? Java Basics - Anfänger-Themen 7
D Verzeichnisse durchsuchen Java Basics - Anfänger-Themen 4
J Verzeichnisse auslesen Java Basics - Anfänger-Themen 3
D Verzeichnisse rekursiv durchlaufen Java Basics - Anfänger-Themen 3
DEvent Dialogfenster in dem man Verzeichnisse auswählen kann Java Basics - Anfänger-Themen 6
Z Klassen, Pakete und Verzeichnisse Java Basics - Anfänger-Themen 8
V Jtree: Alle Verzeichnisse und Ordner anzeigen, aber wie? Java Basics - Anfänger-Themen 2
I Dateien aus dem Resource Folder laden Java Basics - Anfänger-Themen 2
A Thread XML-Dateien zusammenfügen Java Basics - Anfänger-Themen 11
Buroto Threads Verschiedene .txt Dateien Auf Listen und Verbinden Java Basics - Anfänger-Themen 3
J Dateien lesen und schreiben Java Basics - Anfänger-Themen 5
B Jar Dateien ohne IDE verwenden? Java Basics - Anfänger-Themen 1
A Optimierung eines Programms: Mergen der Dateien Java Basics - Anfänger-Themen 23
A Zwei XML-Dateien Mergen Java Basics - Anfänger-Themen 14
A Input/Output Mehrere Csv-Dateien einlesen Java Basics - Anfänger-Themen 2
LetsSebi Dateien werden nicht in Zip gespeichert Java Basics - Anfänger-Themen 1
J Alle .java Dateien von einem Verzeichnis in eine Zip speichern Java Basics - Anfänger-Themen 2
J Alle Dateien aus einem Verzeichnis laden Java Basics - Anfänger-Themen 10
MiMa log4j als separate Dateien in Schleife? Java Basics - Anfänger-Themen 6
M Scannen von *.txt - Dateien; wo sind der oder die Fehler? Java Basics - Anfänger-Themen 4
A Input/Output Dateien einlesen und ausgeben Java Basics - Anfänger-Themen 7
S Lese- / Schreibfähigkeit von Dateien sicherstellen Java Basics - Anfänger-Themen 1
C "HelloWorld" - Dateien erstellt, aber ist es eine class-Datei? Java Basics - Anfänger-Themen 2
J Java findet plötzlich die Dateien im Projekt nicht mehr. Java Basics - Anfänger-Themen 12
J Dateien in Verzeichnissen rekursiv auflisten wirft Exception Java Basics - Anfänger-Themen 4
L Classpath Alle Dateien im Classpath finden Java Basics - Anfänger-Themen 4
MiMa Formate für Dateien und Pfade? Java Basics - Anfänger-Themen 1
O Datei in mehrere kleine Dateien umwandeln Java Basics - Anfänger-Themen 47
L Richtige Reihenfolge der Dateien Java Basics - Anfänger-Themen 5
CptK Datentypen Text Dateien einlesen Java Basics - Anfänger-Themen 3
J Logging erzeugt zwei dateien.... Java Basics - Anfänger-Themen 7
A Dateien Verschieben Java Basics - Anfänger-Themen 1
M Mehre Dateien parallel kopieren mit Multithreading Java Basics - Anfänger-Themen 8
C Methoden Dateien im Ordner anzeigen Java Basics - Anfänger-Themen 12
J Java-Dateien lassen sich nicht editieren Java Basics - Anfänger-Themen 46
E FTP Dateien hochladen Java Basics - Anfänger-Themen 3
J Probleme beim schreiben von Dateien Java Basics - Anfänger-Themen 5
Korvinus Vergleichen von 2 csv-Dateien Java Basics - Anfänger-Themen 2
I Texte mit Absätzen in Dateien speichern und auslesen Java Basics - Anfänger-Themen 1
M "substring()" mit Dateien und Pfadangaben Java Basics - Anfänger-Themen 5
Voreck Jar Dateien Standart programm ändern Java Basics - Anfänger-Themen 12
K Dateien aus Source-Package verwenden Java Basics - Anfänger-Themen 10
B Dateien aus dem "resource" - Folder kopieren in Verzeichnis Java Basics - Anfänger-Themen 9
B Kopieren von Dateien mit Adminberechtigungen Java Basics - Anfänger-Themen 14
F Threads ftp4j, viele Dateien upload Java Basics - Anfänger-Themen 5
P Einen Ordner mit Dateien hochladen [FTP] Java Basics - Anfänger-Themen 2
X Dateien direkt hintereinander schreiben, Dateiname Java Basics - Anfänger-Themen 25
G Messwerte in 2 Dateien schreiben Java Basics - Anfänger-Themen 20
C Verarbeitung von sehr großen Dateien Java Basics - Anfänger-Themen 52
F Input/Output Dateien lesen/schreiben Java Basics - Anfänger-Themen 1
V Mehrere Dateien aus JFileChooser in eine ArrayList speichern Java Basics - Anfänger-Themen 2
K Dateien lesen | IndexOutOfBoundsException Java Basics - Anfänger-Themen 2
T Classpath Problem mit dem auslesen von Text-Dateien (Pfad) Java Basics - Anfänger-Themen 3
A attach source: Zusammenhang zwischen JAR und .class/.java Dateien? Java Basics - Anfänger-Themen 2
T .jar Datei als Ordner benutzen/ Dateien aus .jar Datei auslesen Java Basics - Anfänger-Themen 3
C Klassen Class Files nachladen (mehrer .jar Dateien) Java Basics - Anfänger-Themen 2
Bluedaishi for schleife um Dateien wieder zusammen zu fügen Java Basics - Anfänger-Themen 11
S Resourcen-Dateien im Jar-File verfügbar machen (Intellij 14) Java Basics - Anfänger-Themen 14
J Dateien für anderen User "mitgeben" Java Basics - Anfänger-Themen 1
S Dateien mit Java verschieben Java Basics - Anfänger-Themen 6
A Heap Space Error bei rekursiver Suche in Dateien trotz nur einer Zeile im Speicher Java Basics - Anfänger-Themen 26
E Dateien werden nicht gelöscht Java Basics - Anfänger-Themen 10
S Class Dateien decompilieren Java Basics - Anfänger-Themen 4
T Fehler beim Schreiben in Dateien! Java Basics - Anfänger-Themen 4
Bluedaishi Dateien Lassen sich unter windows nicht löschen Java Basics - Anfänger-Themen 8
Z Mehrere XML-Dateien zu einer zusammenfügen Java Basics - Anfänger-Themen 3
K JAR Dateien einbinden - funkt nicht wie es sollte... Java Basics - Anfänger-Themen 22
M Threads nio Dateien kopieren, Threads und Gui Java Basics - Anfänger-Themen 0
J *.sql Dateien in Java Java Basics - Anfänger-Themen 1
P Dateien im Ordner auflisten. Java Basics - Anfänger-Themen 3
P Compiler-Fehler .java Dateien kompilieren und .class Dateien zur .jar Java Basics - Anfänger-Themen 4
S Daten aus anderen Dateien in neue Datei einlesen Java Basics - Anfänger-Themen 3
M Input/Output Arbeiten mit extrem vielen Dateien Java Basics - Anfänger-Themen 8
R File chooser Dateien in frame anzeigen lassen Java Basics - Anfänger-Themen 5
N tar-Dateien Java Basics - Anfänger-Themen 6
B Methoden Dateien konvertieren Java Basics - Anfänger-Themen 3
L Dateien speichern/auslesen Java Basics - Anfänger-Themen 5
M Input/Output Probleme beim Parsen von CSV und TXT Dateien Java Basics - Anfänger-Themen 7
P Wiedereinstieg und kann keine Dateien mehr öffnen... Java Basics - Anfänger-Themen 13
F Classpath Dateien einbinden und Classpath durchsuchen Java Basics - Anfänger-Themen 2
N Java Programm zum Suchen und Ersetzen von Text Dateien Java Basics - Anfänger-Themen 10
S Dateien/LinkedList/StringBuffer - SOrtierung klappt nicht so ganz Java Basics - Anfänger-Themen 2
U Best Practice Nicht-permanente Links auf Dateien Java Basics - Anfänger-Themen 5
B In welchem (Default) Pfad erstellt Java Dateien? Java Basics - Anfänger-Themen 4
I Methoden zum lesen und speichern von Dateien Java Basics - Anfänger-Themen 2
B .ut dateien ignorieren und fortsetzen Java Basics - Anfänger-Themen 9
R Ressourcen in JAR-Dateien Java Basics - Anfänger-Themen 2
J jar Dateien global erreichbar machen Java Basics - Anfänger-Themen 3
L Zusammenführen mehrerer .txt Dateien Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben