27. maj 2003 - 21:51Der er
43 kommentarer og 1 løsning
dirTree. Kan ikke udskrive filerne i biblioteket
Jeg ville gerne have listet filerne i bibliotekerne i programmet. Men det går ikke rigtigt. Det er ikke noget problem at få konstateret at der er en fil i biblioteket. Men at få denne udskrevet kan jeg ikke.
Det er også underligt at der udskrives tre filer i sidste bibliotek. I hvert bibliotek er der én fil.
import java.io.*;
public class DirTree {
public static void main(String[] argv) { DirTree dt = new DirTree(); if (argv.length == 0) dt.doDir("f:\\hjemmeside" ); else for (int i = 0; i<argv.length; i++) dt.doDir(argv[i]); }
/** doDir - handle one filesystem object by name */ private void doDir(String s) { File f = new File(s); if (!f.exists()) { System.out.println(s + " does not exist"); return; } if (f.isFile()) doFile(f); else if (f.isDirectory()) { System.out.println("\n[:" + f.getName()+"]"); if( f !=null) System.out.println("ikke tom"); String objects[] = f.list(); for (int i=0; i<objects.length; i++) doDir(s + f.separator + objects[i]); } else System.err.println("Unknown: " + s); }
/** doFile - process one regular file. */ private static void doFile(File f) { System.out.println(" " + f.getName()); } }
Jeg har lavet et testdirectory i c:\. Det hedder test. Under test ligger der test2. Under test2 ligger test3. Der ligger filer i test og test3. Jeg får listet nogle af filerne fra test under test3.
public class FileSystem extends File { // Constructor public FileSystem( String name ) { super( name ); }
// Output file name with indentation public void printName( int depth ) { for ( int i = 0; i < depth; i++ ) System.out.print( "\t" ); System.out.println( getName() ); }
// Public driver to list all files in directory public void listAll() { listAll( 0 ); }
// Recursive method to list all files in directory private void listAll( int depth ) { printName( depth );
if ( isDirectory() ) { String[] entries = list();
for ( int i = 0; i < entries.length; i++ ) { FileSystem child = new FileSystem( getPath() + separatorChar + entries[i] ); child.listAll( depth + 1 ); } } }
public long size() { long totalSize = length();
if ( isDirectory() ) { String[] entries = list(); for ( int i = 0; i < entries.length; i++ ) { FileSystem child = new FileSystem( getPath() + separatorChar + entries[i] ); totalSize += child.size(); } }
return totalSize; }
static public void main( String[] args ) { FileSystem f;
if ( args.length == 0 ) f = new FileSystem( "c:\\k" ); // brug . for current dir. else f = new FileSystem( args[0] );
Men kan også en sjov ting: Hvis du laver directory a\b\c\d så gør den ikke et directory færdigt Når den møder filer startende med 'b' går den til diretory B og fortsætter indtil den møder filer startende med 'c' så går den til diretory C osv.
Magoo20000. Det virker ikke helt... Der kommer ikke der korrekte liste frem (se udskriften for neden)
import java.io.File; import java.io.*;
public class FileSystem extends File { // Constructor public FileSystem( String name ) { super( name ); }
// Output file name with indentation public void printName( int depth ) { for ( int i = 0; i < depth; i++ ) System.out.print( "\t" ); System.out.println( getName() ); }
// Public driver to list all files in directory public void listAll() { listAll( 0 ); }
// Recursive method to list all files in directory private void listAll( int depth ) { printName( depth );
if ( isDirectory() ) { String[] entries = list();
for ( int i = 0; i < entries.length; i++ ) { FileSystem child = new FileSystem( getPath() + separatorChar + entries[i] ); child.listAll( depth + 1 ); } } }
public long size() { long totalSize = length();
if ( isDirectory() ) { String[] entries = list(); for ( int i = 0; i < entries.length; i++ ) { FileSystem child = new FileSystem( getPath() + separatorChar + entries[i] ); totalSize += child.size(); } }
return totalSize; }
static public void main( String[] args ) { FileSystem f;
if ( args.length == 0 ) f = new FileSystem( "f:\\hjemmeside" ); // brug . for current dir. else f = new FileSystem( args[0] );
Der er flere ting jeg ikke kan gennemskue. Først og fremmest mener jeg argumentet File f = new File("f://hjemmeside"); skal liste filer i dette dir. Men det bliver ikke gjort. En anden ting er "separator". Er det en metode? (som ligger i .io class'en).
Det er måske her arne_v at jeg ikke har fulgt enkelteheden. Jeg anvender UltraEdit som jeg også compilere med. Jeg prøver at finde ud af det med dos promten
Det virker helt perfekt arne_v. Men er process ikke et beskyttet ord i java. Det fremgår dog ikke af api sepcifikationen (jeg kan ikke finde det). Men er registreret som sådan i UltraEdit. Tak for hjælpen.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.