Frage zu fileList

xeal

Mitglied
Hey,

ich habe mal wieder eine Frage an euch. Ich habe aus einem String ein File Objekt erzeugt. Anschließend lasse ich mir eine fileListe von dem Verzeichnis zurückgeben. In der Rückgabe von fileList sind aber auch Verzeichnisse enthalte auf die ich keinen Zugriff habe. Wie kann ich den Zugiff auf diese Verzeichnisse unterbinden?
Habe es schon mit canRead(); versucht aber leider klappt das nicht. Einzige Möglichkeit die ich bislang gefunden habe, ist mit equals den dateinamen zu vergleichen. Jedoch ist das keine gute Lösung bei mehreren unterschiedlichen Verzeichnisnamen.


Danke schon mal für eure Hilfe.

Gruß Xeal
 
Hi!

Ich habe mir zwar dem Thema noch nicht wirklich angenommen, habe aber mit .NET in diesem Bereich Erfahrung sammeln können. Hast du die Möglichkeit vielleicht Ordneroptionen zu sondieren? Also z.B. ob der Ordner ein Systemordner ist oder nicht? Wäre sicher eine gute Alternative.

Was mir jetzt spontan auch einfällt, kommt natürlich auf die Verwendung an die du damit vor hast, aber du könntest jeden Ordner mit einem gewissen Zeichen (z.b. "_SAVE") oder ähnlichen kennzeichnen. Damit würdest du dir zwar nicht den String compare sparen, aber du müßtest keine genauen Foldernamen spezifizieren. Aber wie gesagt, nur eine spontane Idee.

Gruß
TOM
 
...eine andere Möglichkeit wäre die Verwendung eines FileFilters.

Du prüfst innerhalb der Methode "accept(File)", ob Du die Datei verändern kannst (z.B. mit "canWrite()" oder "renameTo(...)") und gibst dann entsprechend true oder false zurück.

Bei Deiner Auflistung übergibst Du stets diesen Filter und schon bekommst Du nur die bestimmten Dateien zurück.
 
Danke für eure schnelle Hilfe. Werd es erstmal mit der Methode Accept versuchen um das Verzeichnis zu testen. Wenn ich weitere Erkenntnisse habe, melden ich mich wieder.
 
Hallo, ich sitze gerade bei selbigem Problem.
Ich kann nicht feststellen, ob eine Datei bzw. ein Verzeichnis lesegeschützt ist.
canRead() gibt bei mir immer true zurück. Gibt es einen einfachen Weg das zu prüfen?
Hast Du schon neue Erkenntnisse?

würde mich über einen Tip freuen,

nauti
 
Hallo!

Hier mal eine kleines Beispiel dazu:
Umgebung Windows XP, java version "1.5.0_04"
Verzeichnis c:\test
Code:
 C:.
 ????a
 ?   ????a1
 ?   ????a2
 ?   ????a3
 ?	   ????foo.bla
 ????b
 ????c
 ????tut
 	????modul1
 	????modul2
 	????modul3

User "Tom" hat vollen Schreibzugriff auf diesen Verzeichnisbaum.
Der User "Foo" hat keine Rechte zum betreten/auslesen des Verzeichnisses a3 unter a.

Unser Code:
Code:
 package de.tutorials;
 
 import java.io.File;
 
 import javax.swing.filechooser.FileSystemView;
 
 /**
  * @author Tom
  */
 public class FileSystemTraversalExample {
 
 	/**
 	 * @param args
 	 */
 	public static void main(String[] args) throws Exception {
 		System.out.println(System.getProperty("user.name"));
 		treeWalk(new File("c:/test"));
 	}
 
 	static void treeWalk(File file) {
 		System.out.println(file.getAbsolutePath());
 		if (file.isDirectory()) {
 			File[] children = file.listFiles();
 			if (children == null) {
 				return;
 			}
 			for (int i = 0; i < children.length; i++) {
 				treeWalk(children[i]);
 			}
 		}
 	}
 }

Die Ausgabe für den User Tom:
Code:
 Tom
 c:\test
 c:\test\a
 c:\test\a\a1
 c:\test\a\a2
 c:\test\a\a3
 c:\test\a\a3\foo.bla
 c:\test\a\a3\foooo.a
 c:\test\b
 c:\test\c
 c:\test\operation.log
 c:\test\tut
 c:\test\tut\modul1
 c:\test\tut\modul2
 c:\test\tut\modul3

Die Ausgabe für den user Foo:
Code:
 E:\eclipse\3.1\eclipse\workspace\de.tutorials\bin>java de.tutorials.FileSystemTraversalExample
 foo
 c:\test
 c:\test\a
 c:\test\a\a1
 c:\test\a\a2
 c:\test\a\a3
 c:\test\b
 c:\test\c
 c:\test\operation.log
 c:\test\tut
 c:\test\tut\modul1
 c:\test\tut\modul2
 c:\test\tut\modul3

Die listFiles() Methode scheint bei einem nicht betretbaren Verzeichnis null statt einem File[0] Array zurückzugeben...

Gruß Tom
 
Hallo,
danke für das Beispiel!

Scheinbar ist es wirklich am besten das so zu prüfen, denn canRead() verschafft mir da nicht mehr Klarheit, sondern reagiert mMn ziemlich setsam und ist deshalb für mich nicht brauchbar.

Danke nochmals,

nauti
 

Neue Beiträge

Zurück