JAR-File

TJava

Bekanntes Mitglied
Hallo ich habe eine verzeichnisstruktur in einem Jar-Archiv.
doch wenn ich abfrage .isDirectory wird immer false geliefert.
Wieso?
Kann mir jemand helfen, ich möchte nur eine File entpacken.



Java:
JarFile jar = null;
		try {
			jar = new JarFile(jarFile);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	
		Enumeration<?> enum1 = jar.entries();
		while (enum1.hasMoreElements()) {
			JarEntry file = (JarEntry) enum1
					.nextElement();
			
			System.out.println("file "+file);
			File file1 = new File(file.toString());
			System.out.println(file1.isDirectory());
			
			
			java.io.File f = new java.io.File(destDir + java.io.File.separator
					+ file.getName());
			
			if (file.isDirectory()) {
				System.out.println("ist verzecihnis "+file);
				f.mkdir();
				continue;
			}
			
			java.io.InputStream is = null;
			try {
				is = jar.getInputStream(file);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} // get the input stream
			FileOutputStream fos = null;
			try {
				fos = new FileOutputStream(f);
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			try {
				while (is.available() > 0) { // write contents of 'is' to 'fos'
					fos.write(is.read());
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			try {
				fos.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			try {
				is.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

Fehlermeldung:

Code:
java.io.FileNotFoundException: C:\Dokumente und Einstellungen\*****\testdaten\META-INF\MANIFEST.MF (Das System kann den angegebenen Pfad nicht finden)
	at java.io.FileOutputStream.open(Native Method)
	at java.io.FileOutputStream.<init>(Unknown Source)
	at java.io.FileOutputStream.<init>(Unknown Source)
	at de.usu.foxtrot.junit.JUnitExecutorImplementation.extractJar(JUnitExecutorImplementation.java:317)
	at de.usu.foxtrot.junit.JUnitExecutorImplementation.run(JUnitExecutorImplementation.java:140)
	at de.usu.foxtrot.junit.JUnitExecutorImplementation.run(JUnitExecutorImplementation.java:363)
	at de.usu.foxtrot.junit.JUnitExecutorImplementation.run(JUnitExecutorImplementation.java:422)
	at de.usu.foxtrot.framework.Start.main(Start.java:29)
Exception in thread "main" java.lang.NullPointerException
	at de.usu.foxtrot.junit.JUnitExecutorImplementation.extractJar(JUnitExecutorImplementation.java:324)
	at de.usu.foxtrot.junit.JUnitExecutorImplementation.run(JUnitExecutorImplementation.java:140)
	at de.usu.foxtrot.junit.JUnitExecutorImplementation.run(JUnitExecutorImplementation.java:363)
	at de.usu.foxtrot.junit.JUnitExecutorImplementation.run(JUnitExecutorImplementation.java:422)
	at de.usu.foxtrot.framework.Start.main(Start.java:29)
 
Zuletzt bearbeitet:
G

Gast2

Gast
innerhalb eines jar files gibts auch keine directories.
Außerdem kannst du, so wie du es im moment machst, auch nicht auf die daten innerhalb des jar files zugreifen. Dafür gibts die methoden getResource und getResourceAsStream.
 
S

SlaterB

Gast
@EikeB
hmm, ich habe es ausprobiert und
- es gibt doch innerhalb eines Jars Verzeichnisse sowie
- der Zugriff wie er im Code steht funktioniert ;)

---------

allerdings ist er schon ziemlich unschön, ist es ein besonderes Bedürfnis, in einem Forum soviele unnötiges try/catch und sogar
'// TODO Auto-generated catch block' zu spammen?

so geht es auch:
Java:
public class Test
{
    public static void main(String[] args)
        throws Exception
    {
        JarFile jar = null;
        jar = new JarFile("xpp3.jar");

        Enumeration<?> enum1 = jar.entries();
        while (enum1.hasMoreElements())
        {
            JarEntry file = (JarEntry)enum1.nextElement();

            System.out.println("file " + file);
            File file1 = new File(file.toString());
            System.out.println(file1.isDirectory());

            File f = new File("C:/temp/" + File.separator + file.getName());
            if (file.isDirectory())
            {
                System.out.println("ist verzecihnis " + file);
                f.mkdir();
                continue;
            }

            java.io.InputStream is = null;
            is = jar.getInputStream(file);
            FileOutputStream fos = null;
            fos = new FileOutputStream(f);
            while (is.available() > 0)
            { // write contents of 'is' to 'fos'
                fos.write(is.read());
            }
            fos.close();
            is.close();
        }
    }
}
Jar:
Download xpp3.jar : xpp3.jarSTUVWXYZJar File Download

Ausgabe am Anfang:
Code:
file META-INF/
false
ist verzecihnis META-INF/
file META-INF/MANIFEST.MF
false
file META-INF/services/
false
ist verzecihnis META-INF/services/
file META-INF/services/org.xmlpull.v1.XmlPullParserFactory
false
file XPP3_1.1.4c_VERSION
false
file javax/
das false kommt jeweils von dem File-Objekt auf der Festplatte, welches vor dem Entpacken noch gar nicht existiert,
insofern langweilig,
'ist verzecihnis' zeigt wenn das Jar selber einen Eintrag als Verzeichnis bekannt gibt,
alles funktioniert
oder was genau in welchem Schritt nicht?

eine konkrete Datei, sowie ein konkretes Log wäre hilfreich

> wenn ich abfrage .isDirectory wird immer false geliefert. Wieso?

sehr ungünstige Frage, da es mehrere isDirectory()-Abfragen gibt, aber vielleicht haben meine Erklärungen das schon beantwortet?


------


die Exception deutet aber in der Tat darauf hin, dass Verzeichnisse im Jar nicht richtig erkannt werden,
keine Verzeichnisse auf der Festplatte erstellt werden, so dass irgendwann die realen File-Objekte nicht mehr funktionieren
 
Zuletzt bearbeitet von einem Moderator:

TJava

Bekanntes Mitglied
Danke, ich weiß nicht woran es liegt die Fehlermeldung habe ich schon gepostet.
Die Datei ist ganz normal. Paar Ordner mehr nicht.
Gibts keine andere Lösung?
 

TJava

Bekanntes Mitglied
Also
diese Stelle finde ich komisch
is = jar.getInputStream(file);

wenn ich file ausgebe steht da:
META-INF/MANIFEST.MF
 
S

SlaterB

Gast
> diese Stelle finde ich komisch
> is = jar.getInputStream(file);

dazu hast du keinen Grund, wenn man eine Datei aus dem Jar lesen will muss man ja irgendeinen Befehl aufrufen,
wieso nicht diesen?
komisch finden ist an sich eine gesunde Sache, wenn du aber irgendwo an halbwegs seriöser Stelle derartigen Code liest,
dann kannst du dem schon auch vertrauen,
warum gibt es eine solche Methode in jar, wenn nicht um sinnvoll statt komisch zu sein?

-----

> ich weiß nicht woran es liegt die Fehlermeldung habe ich schon gepostet.

diese Fehlermeldung hängt aber von zahlreichen Dingen im gesamten Programmverlauf ab,
du kannst dich damit begnügen und hoffen dass dir jemand die Lösung nennt, ich persönlich könnte das nicht
und wäre über weitere Infos erfreut, z.B.
- dein Jar-File als Datei anhängen, magst du vielleicht nicht
- was ist bei dir destDir? verrätst du einfach nicht,
- verzichte übrigens lieber auf 'C:\Dokumente und Einstellungen' usw., wenn du dort keine Rechte hast wäre der Fehler schon geklärt,
kann natürlich bei 'C:\Temp' oder sonstwo genauso passieren,
hast du schon das Anlegen von Test-Verzeichnissen aus deinem Programm geübt?
- wie gesagt wäre ein Log schön, so wie es gepostet habe, System.out.println() ist in deinem Programm ja auch schon vorhanden,
was sind die ersten Jar-Einträge, funktionieren die? oder kommt META-INF\MANIFEST.MF als erstes?
- idealerweise könntest du mein Programm bei dir verwenden, erst mit dem zu downloadenden Jar, dann mit deinem

usw., du siehst es sind immer tausend Dinge zu machen und hier zu schreiben, nur 'ich hab Fehler' ist nicht gut,
wobei du natürlich schon viel Code und die Fehlermeldung gepostet hast, besser als die meisten ;)
 

TJava

Bekanntes Mitglied
so jetzt nochmal etwas vereinfacht:

Java:
private void extractJar(String jarFile) throws IOException {
		jarFile = "c:/ExampleTests.jar";
		
		String destDir = "c:/h";
		JarFile jar = null;
		jar = new JarFile(jarFile);
		Enumeration<?> enum1 = jar.entries();
		while (enum1.hasMoreElements()) {
			JarEntry file = (JarEntry) enum1.nextElement();
			System.out.println("File :" + file);
			File f = new File(destDir + File.separator + file.getName());
			System.out.println("Ausgabe: " + f);
			
			if (file.isDirectory()) {
				System.out.println("ist verzeichnis " + file);
				f.mkdir();
				continue;
			}

			InputStream is = null;
			is = jar.getInputStream(file);
			FileOutputStream fos = null;
			fos = new FileOutputStream(f);
			while (is.available() > 0) { // write contents of 'is' to 'fos'
				fos.write(is.read());
			}
			fos.close();
			is.close();
		}
	}


ausgabe:

File :META-INF/MANIFEST.MF
Ausgabe: c:\h\META-INF\MANIFEST.MF

Fehlermeldung:

Java:
java.io.FileNotFoundException: c:\h\META-INF\MANIFEST.MF (Das System kann den angegebenen Pfad nicht finden)
	at java.io.FileOutputStream.open(Native Method)
	at java.io.FileOutputStream.<init>(Unknown Source)
	at java.io.FileOutputStream.<init>(Unknown Source)
	at de.usu.foxtrot.junit.JUnitExecutorImplementation.extractJar(JUnitExecutorImplementation.java:307)
	at de.usu.foxtrot.junit.JUnitExecutorImplementation.run(JUnitExecutorImplementation.java:146)
	at de.usu.foxtrot.junit.JUnitExecutorImplementation.run(JUnitExecutorImplementation.java:333)
	at de.usu.foxtrot.junit.JUnitExecutorImplementation.run(JUnitExecutorImplementation.java:392)
	at de.usu.foxtrot.framework.Start.main(Start.java:29)
 

Anhänge

  • ExampleTests.jar
    2,1 KB · Aufrufe: 5
S

SlaterB

Gast
damit kann ich etwas weiter kommen, ja
die komplette Ausgabe aller Einträge ohne irgendwas damit zu machen ist bei mir
Code:
file META-INF/MANIFEST.MF
file de/beispiel/test/Example1Test.class
file de/beispiel/test/Example2Test.class
file .classpath
file .project
es fehlen sämtliche Einträge für Verzeichnisse

erinnert mich an folgendes Theme kürzlich
http://www.java-forum.org/java-basics-anfaenger-themen/122982-hoechster-ordner-zip-datei.html
indem despikeexd davon schrieb dass in einem Zip-Archiv die Verzeichnis-Einträge fehlten

leider kann ich persönlich nicht sagen, wann und warum das so ist,
da andere Jars (siehe Download-Link xpp3.jar) funktionieren, vermute ich stark dass es am Jar, an der Art der Erzeugung oder Encoding oder wer weiß was liegt,
wie erzeugst du deine Jars?

Windows-Entpacker werden damit aber fertig, Java selber ist da wohl überempfindlicher als es nötig wäre,
aber lösen kann ich das nicht

edit:
also nicht lösen, warum diese Einträge fehlen

du könntest aber von den Pfaden alles bis zum letzten / abschneiden und dann aus diesem offensichtlichen Verzeichnispfad Verzeichnisse erstellen,
falls schon vorhanden passiert einfach nix,
dann müsste dein Programm auch funktionieren
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Java-PRogramm liest als EXE-File Nicht USB, jedoch aus NetBeans Java Basics - Anfänger-Themen 45
I Dateien in einem .war - File durchgehen? Java Basics - Anfänger-Themen 1
Timo12345 JNLP File mit Java öffnen Java Basics - Anfänger-Themen 2
I Bild richtig speichern / Hochkant im File Explorer, nach Upload vertikal Java Basics - Anfänger-Themen 9
R File.pathSeparator und File.separator Java Basics - Anfänger-Themen 46
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
izoards Prunsrv - Windows Service - .bat file starten Java Basics - Anfänger-Themen 84
I File Uploader... Statusanzeige, Berechnung des Status etc. Java Basics - Anfänger-Themen 0
I H2 Datenbank starten / Daten in File speichern Java Basics - Anfänger-Themen 25
G jar file lässt sich nicht öffnen Java Basics - Anfänger-Themen 1
N Textdatei aus Resourcen-Ordner eines Projekts/ jar-file lesen Java Basics - Anfänger-Themen 4
J File length als Prüfwert für Download Java Basics - Anfänger-Themen 5
berserkerdq2 Überprüfen ob eine Schreibberechtigung auf ein file exisitert bzw. ob man dieses file löschen kann, wie? Java Basics - Anfänger-Themen 9
berserkerdq2 IOstreams, was unterscheidet file von z. B. BufferedWriter? Java Basics - Anfänger-Themen 11
J Datentypen String in File konvertieren funktioniert nicht Java Basics - Anfänger-Themen 4
A java jar-File Java Basics - Anfänger-Themen 1
E Executable jar file fehler Java Basics - Anfänger-Themen 9
I Upload File zu einem Webservice Java Basics - Anfänger-Themen 17
I ZIP File erstellen Java Basics - Anfänger-Themen 10
LeoDerKek Textdatei in JAR-File Java Basics - Anfänger-Themen 4
Tom/S File Java Basics - Anfänger-Themen 10
AleXusher Mehrdimensionales Array aus txt.file auslesen Java Basics - Anfänger-Themen 4
A Checkstyle - File contains tab characters Java Basics - Anfänger-Themen 2
H Java file nicht gefunden Java Basics - Anfänger-Themen 5
C File speichern Java Basics - Anfänger-Themen 5
C Runnable Jar-File erzeugen Java Basics - Anfänger-Themen 14
C Pfad zu Properties-File bei ResourceBundle Java Basics - Anfänger-Themen 7
F GSON file mit einer List erstellen Java Basics - Anfänger-Themen 2
rafi072001 Lesen aus einem Excel File Java Basics - Anfänger-Themen 10
C Bild in executable JAR File mitgeben Java Basics - Anfänger-Themen 5
K File (png) in Image laden Java Basics - Anfänger-Themen 3
B Inputstream in file schreiben? Java Basics - Anfänger-Themen 23
S Input/Output Reader/Writer finden file nicht Java Basics - Anfänger-Themen 3
T Buffered Stream leert Txt File Java Basics - Anfänger-Themen 3
A 2d Arrays aus txt.file einlesen Java Basics - Anfänger-Themen 16
Dimax In Java File (nicht in Java Projekt) mysql Driver importieren Java Basics - Anfänger-Themen 3
K File wird in der .Jar nicht gefunden Java Basics - Anfänger-Themen 3
E TXT FILE EINLESEN Java Basics - Anfänger-Themen 4
Trèfle EXCEL-File Laufwerkunabhängig einbinden. Java Basics - Anfänger-Themen 1
B HTML File einlesen inkl. Bilder? Java Basics - Anfänger-Themen 2
B Hilfe bei InputStream To File Java Basics - Anfänger-Themen 22
topi relativer Pfad in einem Runnable JAR file Java Basics - Anfänger-Themen 12
A jar File kleiner bekommen Java Basics - Anfänger-Themen 3
B File öffnen in src/main/webapp Java Basics - Anfänger-Themen 4
K File-Name Vergleich Java Basics - Anfänger-Themen 2
krgewb Runnable JAR File Export Java Basics - Anfänger-Themen 11
S Maxium aus einer File finden Java Basics - Anfänger-Themen 12
dapzoo Class File Version zu niedrig? Ausführen über Eingabeaufforderung nicht möglich Java Basics - Anfänger-Themen 14
D Input/Output File exists canRead canWrite Java Basics - Anfänger-Themen 11
B cal4j - Error at line 1:Unexpected end of file Java Basics - Anfänger-Themen 0
P jar file lässt sich nicht ausführen Java Basics - Anfänger-Themen 4
E Best Practice Jar-file mit zwei Klassen und externer Bibliothek über Konsole erzeugen Java Basics - Anfänger-Themen 13
M Erste Schritte CSV-File einlesen und Daten verarbeiten Java Basics - Anfänger-Themen 5
F File von Windowsfreigabe laden Java Basics - Anfänger-Themen 1
S java.nio.file.FileSystemException bei Dateizugriff vermeiden Java Basics - Anfänger-Themen 7
Vince42 NIO File Tree in XML umwandeln Java Basics - Anfänger-Themen 10
J Zweidimensionales Array in CSV File exportieren Java Basics - Anfänger-Themen 3
E War-File Problem mit Eclipse Java Basics - Anfänger-Themen 3
B Excel File einlesen und Überschrift prüfen Java Basics - Anfänger-Themen 8
M Email versenden Outlook, attached File, ohne Anmeldung Java Basics - Anfänger-Themen 4
M Input/Output Word File Kopieren Java Basics - Anfänger-Themen 12
K Runable Jar File erstellen Java Basics - Anfänger-Themen 17
T Java Executable jar file funktioniert nicht Java Basics - Anfänger-Themen 4
sourcecorn Werte aus einem File lesen Java Basics - Anfänger-Themen 6
Kopak'rraf Korruptes zip File. Java Basics - Anfänger-Themen 0
T File für Einstellungen wird nicht geladen Java Basics - Anfänger-Themen 1
S Sounddatei in Jar File integrieren Java Basics - Anfänger-Themen 2
S Index File bauen Java Basics - Anfänger-Themen 5
T Anzeige, wie lange es noch dauert bis ein File gesendet ist. Java Basics - Anfänger-Themen 2
T filereader , file aus programm einlesen Java Basics - Anfänger-Themen 12
Ghostman1711 Itext PDF print File gelockt by Java Java Basics - Anfänger-Themen 15
N Email mit Anhang - File not Found Java Basics - Anfänger-Themen 1
K Interface Kein Bild im .jar-File Java Basics - Anfänger-Themen 15
S Bild in Jar-File mit ImageIO Java Basics - Anfänger-Themen 50
Syncopated Pandemonium Compiler-Fehler The constructor MP3File(File) refers to the missing type NoMPEGFramesException Java Basics - Anfänger-Themen 7
S File mit canRead() testen Java Basics - Anfänger-Themen 4
A file.delete funktioniert nicht Java Basics - Anfänger-Themen 15
K Classpath Lesen von Property-File Java Basics - Anfänger-Themen 1
S jar file Java Basics - Anfänger-Themen 19
B Fragen zu ZIP-File Java Basics - Anfänger-Themen 9
B Dateityp von File bekommen Java Basics - Anfänger-Themen 2
I Automatisch Verzeichnis erstellen bei File erstellen Java Basics - Anfänger-Themen 5
E Große Datenmengen effizient in CSV File speichern Java Basics - Anfänger-Themen 4
I String zu File umwandeln Java Basics - Anfänger-Themen 2
N File virtuell ByteStream Java Basics - Anfänger-Themen 11
X Übergabeparameter Konstruktor (File) Java Basics - Anfänger-Themen 13
Anfänger2011 file.isDirectory() liefert falschen Wert!? Java Basics - Anfänger-Themen 1
ms_cikar Jar file mit resource erzuegen Java Basics - Anfänger-Themen 28
E lesen csv file column by column Java Basics - Anfänger-Themen 10
U Anhand von Ant ein War-File erstellen Java Basics - Anfänger-Themen 0
B Quellcode einelsen "line by line" (und abspeichern in file (txt) Java Basics - Anfänger-Themen 7
O Zip-File Inhalt einlesen Java Basics - Anfänger-Themen 3
V Erste Schritte Dateinamen aus einer FIle[] in eine List Java Basics - Anfänger-Themen 11
P Jar File Java Basics - Anfänger-Themen 3
B Probleme bei "Daten in CSV File schreiben". Java Basics - Anfänger-Themen 9
S CSV File - "Vergleichen und Sortieren" Java Basics - Anfänger-Themen 3
T Wieso kann ich das jar file nicht starten? Java Basics - Anfänger-Themen 5
S Resourcen-Dateien im Jar-File verfügbar machen (Intellij 14) Java Basics - Anfänger-Themen 14
A Wieso übergibt der nicht die bearbeitete txt file Java Basics - Anfänger-Themen 8
Ruvok Executable Jar File startet nicht Java Basics - Anfänger-Themen 3

Ähnliche Java Themen


Oben