WinFuture-Forum.de: Java Und File.list() In Jar-archiven - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Java Und File.list() In Jar-archiven


#1 Mitglied ist offline   h3llfire 

  • Gruppe: aktive Mitglieder
  • Beiträge: 67
  • Beigetreten: 14. Dezember 04
  • Reputation: 0

geschrieben 10. Juni 2007 - 14:42

hallo Zusammen,

Ich möchte in Java die Dateien eines bestimmten Verzeichnis auflisten. Das klappt auch ganz gut mit:
File dir = new File("verzeichnis/");  
String[] files = dir.list();

Doch leider funktioniert das ganze nicht wenn ich das Programm als Jar-Archive packe.
Hat jemand eine Idee, wie man das ganze auch in jars zum laufen bekommt?

Hier ein Beispielprogramm wobei der Order "images", einige Bilder enthält:

   public static void main(String[] args) {
		File dir = new File("images/");
		String[] files = dir.list();
		System.out.println("list(): " + Arrays.toString(files));
		
	}

0

Anzeige



#2 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.947
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 10. Juni 2007 - 18:32

Befindet sich dieser Ordner auch in dem Jar-Archiv?
Dann musst du diesen nämlich anders einlesen. Hier zwei Beispiele.
URL url = MeineKlasse.class.getClassLoader().getResource("images/");

InputStream stream = MeineKlasse.class.getClassLoader().getResourceAsStream("images/");

0

#3 Mitglied ist offline   h3llfire 

  • Gruppe: aktive Mitglieder
  • Beiträge: 67
  • Beigetreten: 14. Dezember 04
  • Reputation: 0

geschrieben 10. Juni 2007 - 21:28

Zitat

Befindet sich dieser Ordner auch in dem Jar-Archiv?

ja tun sie.

jetzt habe ich eine url zu dem verzeichnis..und wie bekomm ich jetzt eine Liste mit den Datien in ihm?

Dieser Beitrag wurde von h3llfire bearbeitet: 10. Juni 2007 - 21:38

0

#4 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.947
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 11. Juni 2007 - 06:36

Wozu gibt's denn eine API? :wink:

http://java.sun.com/javase/6/docs/api/inde...va/net/URL.html
http://java.sun.com/...va/io/File.html

Wie du siehst führen hier wieder mal viele Wege nach Rom. Aber der einfachste Weg ist wohl, wenn du auf die Methode getPath der Klasse URL zugreifst. Daraus kannst du dann wie gewohnt dein dein File-Objekt instanziieren.
0

#5 Mitglied ist offline   h3llfire 

  • Gruppe: aktive Mitglieder
  • Beiträge: 67
  • Beigetreten: 14. Dezember 04
  • Reputation: 0

geschrieben 11. Juni 2007 - 14:51

Danke für die Antwort, aber das habe ich auch schon probiert gehabt und das ganze klappt einfach nicht.
Ich hatte auch schon ein paar andere methoden ausprobiert...aber immer wieder ohne Erfolg.

Hierbei mal meine Beispieldatei...entpackt funktioniert alles, aber so über die konsole aufgerufen: "java -jar dirlist.jar" kein Erfolg....liefert immer null zurück.

Angehängte Datei  dirlist.jar.txt (2,62K)
Anzahl der Downloads: 308
0

#6 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.947
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 12. Juni 2007 - 07:33

Habe mich gerade mal erkundigt. Leider funktioniert das Auflisten eines Unterverzeichnisses innerhalb eines Jar-Archives (Zip-Archiv) nicht. Du kannst nur direkt die Dateien ansprechen.

Wenn du trotzdem sowas in die Richtung machen möchtest, musst du auf die Zip-Funktionalitäten von Java zurückgreifen. Hier mehr: http://java.sun.com/developer/technicalArt...ng/compression/
0

#7 Mitglied ist offline   MNG 

  • Gruppe: aktive Mitglieder
  • Beiträge: 293
  • Beigetreten: 29. März 06
  • Reputation: 0

geschrieben 12. Juni 2007 - 08:51

Versuch's mal als Ansatz mit
try
{
	java.util.jar.JarFile jarFile = new java.util.jar.JarFile("test.jar");
	Enumeration entries = jarFile.entries();
	while (entries.hasMoreElements())
	{
		java.util.zip.ZipEntry entry = (java.util.zip.ZipEntry) entries.nextElement();
		System.out.println("Naechster Eintrag: " + entry.getName());
	}
}
catch (Exception e)
{
	System.err.println("Fehler, kann File nicht lesen: " + e.getMessage());
}

Kann ich hier gerade nicht testen, für Unterverzeichnisse musst du noch irgendwas Rekursives auf den ZipEntries aus dem Hut zaubern.

Dieser Beitrag wurde von MNG bearbeitet: 12. Juni 2007 - 08:53

0

#8 Mitglied ist offline   h3llfire 

  • Gruppe: aktive Mitglieder
  • Beiträge: 67
  • Beigetreten: 14. Dezember 04
  • Reputation: 0

geschrieben 12. Juni 2007 - 13:02

Zitat

Habe mich gerade mal erkundigt. Leider funktioniert das Auflisten eines Unterverzeichnisses innerhalb eines Jar-Archives (Zip-Archiv) nicht.

Danke jetzt weiß ich wenigstens das es nicht an mir liegt :D

@MNG Danke, der Ansatz sieht vielversprechend aus, funktioniert super, jetzt muss ich nur noch herausfinden wie ich an dynamisch an den Jar-Dateinamen komme

EDIT:

So habe was hinbekommen, es gibt bestimmt eine bessere Lösung, aber so funktioniert es^^

package test;

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.jar.JarEntry;

public class List {

	public static void main(String[] args) {
		System.out.println(Arrays.toString(dirList("dir/")));
	}

	public static String[] dirList(String dir){
		try{
String filename = List.class.getClassLoader().getResource(List.class.getPackage().getName().replaceAll("\\.", "/")).getFile();
			if(filename.contains(".jar")){
				 ArrayList<String> files = new ArrayList<String>();
				 String[] tmp = filename.split("!");
				 filename=tmp[0].replaceFirst("file:/", "");			 
	
					 java.util.jar.JarFile jarFile = new java.util.jar.JarFile(filename);
					 Enumeration<JarEntry> entries = jarFile.entries();
					 while (entries.hasMoreElements())
					 {
						 java.util.zip.ZipEntry entry = entries.nextElement();
						 if(entry.getName().startsWith(dir)){
								 String tmp2 = entry.getName().replaceFirst(dir, "");
								 if(!tmp2.isEmpty()){
									 if(tmp2.charAt(tmp2.length()-1)=='/'){
										 tmp2=tmp2.substring(0, tmp2.length()-1);
									 }
									 files.add(tmp2);
								 }
								 
						 }
					 }
					 Object[] ob = files.toArray();
					 String files2[] = new String[ob.length];
					 for (int i = 0; i < files2.length; i++) {
						files2[i]=(String) ob[i];
					 }
					 return files2;
			}else{
				return new File(dir).list();
			}
		}catch (Exception e){
			System.err.println("Fehler bei listen des Verzeichnises: "+dir+"\n"+e.getMessage());
		}
		return null;
	}
}

Dieser Beitrag wurde von h3llfire bearbeitet: 12. Juni 2007 - 14:48

0

#9 Mitglied ist offline   h3llfire 

  • Gruppe: aktive Mitglieder
  • Beiträge: 67
  • Beigetreten: 14. Dezember 04
  • Reputation: 0

geschrieben 13. Juni 2007 - 13:01

das Problem geht weiter...
und zwar Funktioniert die sache nicht wenn das Jar von Java Web Start gestartet wird.
List.class.getClassLoader().getResource(List.class.getPackage().getName().replaceAll("\\.", "/")).getFile();

liefert mit dann die url beginnend mit http://... zurück, ich brauche aber die url zum lokalen file, das duch den jnlp ja heruntergeladen wurde. Jemand eine Idee?
0

#10 Mitglied ist offline   tastatur78 

  • Gruppe: Mitglieder
  • Beiträge: 1
  • Beigetreten: 05. Oktober 07
  • Reputation: 0

geschrieben 05. Oktober 2007 - 19:11

Hallo,

ich habe das gleiche Problem bei der Verwendung von Web Start, hat jemand bereits eine Lösung dafür gefunden?

Vielen Dank im Voraus!
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0