listfiles unter Linux... Echte datei von Links unterscheiden?

Smily0412

Mitglied
Hoi,

Ich habe folgenden Codeschnipsel, um alle verzeichnisse zu erfassen:

Java:
import java.io.File;

public class Filemaster {
	public static void main(String[] args) {
		listFiles("/");
	}

	private static void listFiles(String dir) {
		File path = new File(dir);
		  for ( File file : path.listFiles() )  {
			  System.out.println(dir + file.getName());
			  if(file.isDirectory())
				  listFiles(dir + file.getName() + "/");
		  }
	}
}

Mein problem ist, das es unter linux links bzw "Querverweise" im verzeichnisssystem gibt. Wenn eine Ordner auf einen Ordner verweist, der in der Hirachie weiter oben ist passiert z.B. folgendes:

/sys/block/loop7/subsystem/loop7/subsystem/loop7/subsystem/loop7/subsystem/loop7/subsystem/loop7/subsystem/loop7/ ... usw. usf.
Das geht dann endlos so weiter.
ich glaube das Problem ist klar... wie kann ich das umgehen?
 
Zuletzt bearbeitet:
Hallo,

also überprüfen ob es ein Link ist kannst du so.

Code:
ShellFolder.getShellFolder(new File("")).isLink()

und so bekommst du die Location zu der der Link zeigt

Code:
ShellFolder.getShellFolder(new File("")).getLinkLocation()

MFG

zEriX
 
das geht bei mir nicht.

System.out.println(ShellFolder.getShellFolder(new File("/sys/block/loop7/subsystem/")).isLink());

gibt bei mir false zurück, obwohl es so ein link ist.
 
Ich kann es hier leider nicht unter Linux-Bedingungen testen, aber ich schaue heute abend mal, wenn ich Zuhause bin.

MFG

zEriX
 
Ihr wisst, dass Vista auch Links wie blöde benutzt....z.B. zeigen alle deutschen Windowsordner Namen auf die englische original Verzeichnise.
 
@offtopic
Wer benutzt schon Vista? ;) Ich werde es so die nächsten 2-3 Jahre noch nicht tun. Einmal kurz draufschauen hat mir gereicht um es für Müll zu befinden der dumm zusammengeklaut ist.

Was dass dann mit den Links von deutsch auf englisch soll ist mir somit auch ein Rätsel :D
 
Hallo,

schau mal hier:
Java:
/**
 * 
 */
import java.io.File;

/**
 * @author Thomas.Darimont
 *
 */
public class UncoverLinksExample {

  /**
   * @param args
   */
  public static void main(String[] args) throws Exception{
    File file = new File("/tmp/java");
    System.out.println("Files in: " + file);
    
    for(File child : file.listFiles()){
      System.out.printf("File: %s -> Canonical File: %s\n",child,child.getCanonicalFile());
    }
  }

}

Code:
root@x-desktop:/tmp/java# ls -aFl
insgesamt 20
drwxr-xr-x  3 root root 4096 2007-10-19 16:22 ./
drwxrwxrwt 12 root root 4096 2007-10-19 16:10 ../
drwxr-xr-x  2 root root 4096 2007-10-19 16:10 bubu/
lrwxrwxrwx  1 root root    4 2007-10-19 16:10 link_to_bubu -> bubu/
-rw-r--r--  1 root root 1137 2007-10-19 16:22 UncoverLinksExample.class
-rw-r--r--  1 root root  454 2007-10-19 16:22 UncoverLinksExample.java
root@x-desktop:/tmp/java# java UncoverLinksExample
Files in: /tmp/java
File: /tmp/java/UncoverLinksExample.class -> Canonical File: /tmp/java/UncoverLinksExample.class
File: /tmp/java/link_to_bubu -> Canonical File: /tmp/java/bubu
File: /tmp/java/UncoverLinksExample.java -> Canonical File: /tmp/java/UncoverLinksExample.java
File: /tmp/java/bubu -> Canonical File: /tmp/java/bubu

Gruß Tom
 
Zurück