24. september 2002 - 16:48
Der er
25 kommentarer og 1 løsning
Sortering af filer
Jeg har følgende to klasser: import java.io.File; import java.util.Arrays; public class Model { private File fil; public Model() { setDir( "C:/" ); } public void listFiles() { File[] struktur = fil.listFiles(); Arrays.sort( struktur, new FileComparator() ); for( int i = 0; i < struktur.length; i++ ) System.out.println( struktur[i] ); } public static void main( String[] args ) { Model model = new Model( "C:/" ); model.listFiles(); } } --- import java.util.Comparator; import java.io.File; public class FileComparator implements Comparator { public int compare( Object o1, Object o2 ) { File f1 = (File) o1; File f2 = (File) o2; String temp1 = ""; String temp2 = ""; if ( f1.isDirectory() && f2.isDirectory() ) { temp1 = f1.getName().toLowerCase(); temp2 = f2.getName().toLowerCase(); return temp1.compareTo( temp2 ); } else if ( f1.isFile() && f2.isFile() ) { temp1 = f1.getName().toLowerCase(); temp2 = f2.getName().toLowerCase(); return temp1.compareTo( temp2 ); } if ( f1.isDirectory() && f2.isFile() ) { return -1; } else if ( f1.isFile() && f2.isDirectory() ) { return 1; } else return 0; } } ----- Det bliver ikke udskrevet korrekt sorteret...altså dirs først og dernæst filer
Annonceindlæg fra Kommando
24. september 2002 - 16:49
#1
Min udskrift er som følger: C:\Documents and Settings C:\Inetpub C:\jdk1.3.1_03 C:\PHP C:\Program Files C:\Programmer C:\Recycled C:\WINNT C:\AUTOEXEC.BAT C:\boot.ini C:\Bootfont.bin C:\CONFIG.SYS C:\DD-GUI.ini C:\IO.SYS C:\MSDOS.SYS C:\NTDETECT.COM C:\ntldr C:\pagefile.sys C:\j2sdk1.4.0_01 C:\j2sdk1.4.1 C:\Kawapro5.0 C:\arcldr.exe C:\arcsetup.exe
24. september 2002 - 16:56
#2
hvad med at have 2 strukturer, altså en til filnavne og en til dirnavne if(file.isdir()) fileList.add(file) else dirList.add(file) ?
24. september 2002 - 17:01
#3
jeg vil gerne gøre det på måden ovenfor... har lige opdaget File også implementerer Comparable, men det ændrer ikke noget for mig import java.util.Comparator; import java.io.File; public class FileComparator implements Comparator { public int compare( Object o1, Object o2 ) { File f1 = (File) o1; File f2 = (File) o2; if ( f1.isDirectory() && f2.isDirectory() || f1.isFile() && f2.isFile() ) return f1.compareTo( f2 ); else if ( f1.isDirectory() && f2.isFile() ) return -1; else if ( f1.isFile() && f2.isDirectory() ) return 1; else return 0; } }
24. september 2002 - 17:30
#4
følgende virker...men hvorfor det? import java.util.Comparator; import java.io.File; public class FileComparator implements Comparator { public int compare( Object o1, Object o2 ) { File f1 = (File) o1; File f2 = (File) o2; if ( f1.isDirectory() && f2.isDirectory() || f1.isFile() && f2.isFile() ) return f1.compareTo( f2 ); else if ( f1.isDirectory() && f2.isFile() ) return -1; else //( f1.isFile() && f2.isDirectory() ) return 1; // else // return 0; } }
24. september 2002 - 17:37
#5
næ, stadig en lille fejl C:\Documents and Settings C:\Inetpub C:\j2sdk1.4.0_01 C:\j2sdk1.4.1 C:\jdk1.3.1_03 C:\Kawapro5.0 C:\PHP C:\Program Files C:\Programmer C:\Recycled C:\WINNT C:\arcldr.exe C:\arcsetup.exe C:\pagefile.sys C:\AUTOEXEC.BAT C:\boot.ini C:\Bootfont.bin C:\CONFIG.SYS C:\DD-GUI.ini C:\IO.SYS C:\MSDOS.SYS C:\NTDETECT.COM C:\ntldr pagefile.sys er placeret forkert
24. september 2002 - 18:27
#6
er der ingen der kan svare? har lige fået at vide der er en bug mht. pagefile.sys...er det korrekt?
24. september 2002 - 18:37
#7
måske fordi pagefile.sys er en skjult fil og sikkert også en systemfil prøv at teste ved at lave en dummy.ext fil der også er skjult og systemfil.
24. september 2002 - 18:44
#8
ved ikke hvordan jeg laver den til systemfil, men som skjult er der ingen probs
24. september 2002 - 18:49
#9
gør sådan: attrib +h +s dummy.ext
24. september 2002 - 18:49
#10
pagefile.sys siger false til både isfile() og isdirectory() hvad er den så :-)
24. september 2002 - 18:54
#11
det er vist bare windows der ikke tør overlade kontrollen af pagefile.sys til brugeren :-)
24. september 2002 - 19:04
#12
soreno: det må blive din løsning, som jeg også havde overvejet, men nu var det her sjovere...der får jeg så ikke listet systemfiler, men det er da bedre end en fejlsortering hvis der er to systemfiler i en mappe :-)
24. september 2002 - 19:10
#13
det er faktisk ikke særligt sjovt at lave noget filnavigerings software i java, mig bekendt kan man ikke skifte drev i java (windows..), eller få en liste over tilgængelige drev. :-(
24. september 2002 - 19:10
#14
min dumm.ext returnerer godt nok true ved isFile() jeg er lidt forvirret
24. september 2002 - 19:11
#15
soreno: jo, det kan du da godt
24. september 2002 - 19:21
#16
hvordan kan man få fat i en liste over tilgængelige drev i windows via java ?
24. september 2002 - 19:33
#17
FileSystemView.getRoots() kan vel bruges til noget
24. september 2002 - 19:49
#18
ja, det ser da ud til det godt kunne bruges til noget :-)
24. september 2002 - 20:00
#19
JFileChooser j = new JFileChooser(); FileSystemView f = j.getFileSystemView(); File[] array = f.getRoots(); for( int i = 0; i < array.length; i ++ ) System.out.println( array[i] + " " ); udskriver C:\Documents and Settings\riversen\Skrivebord hos mig :-(
24. september 2002 - 20:03
#20
File.listRoots() gør trigget ganske enkelt :-)
24. september 2002 - 20:07
#21
derfor: getRoots public File[] getRoots() Returns all root partitions on this system. For example, on Windows, this would be the "Desktop" folder, while on DOS this would be the A: through Z: drives. ved nærmere eftersyn ser det ikke ud til at det kan lade sig gøre (med den klasse) :-(
24. september 2002 - 20:09
#22
nej, men den klasse, men så er det jo heldig vi har File
24. september 2002 - 20:09
#23
ahhh, ok :-)
24. september 2002 - 20:11
#24
ja, jeg overså den også...jeg må være træt
24. september 2002 - 20:13
#25
sådan nogle metoder plejer jo også at hedde noget med get** :-)
24. september 2002 - 20:19
#26
det var nemlig det jeg kiggede efter
Kurser inden for grundlæggende programmering