Re: The first 10 files
On 1/26/2013 1:14 AM, Wojtek wrote:
Using:
int max = 10;
int count = 0;
for (File thisFile : aDir.listFiles())
{
doSomething(thisFile);
if ( ++count >= max )
break;
}
gives me the first ten files in aDir. But if aDir contains 30K files,
then the listFiles() will run for a long time as it builds an array for
the 30K files.
Is there a way to have Java only get the first "max" files?
import java.io.*;
import java.nio.*;
import java.nio.file.*;
public class FileSystemsTest {
public static void main(String[] args) throws IOException {
long start = System.currentTimeMillis();
Path dir = FileSystems.getDefault().getPath(".");
int i=10;
DirectoryStream<Path> stream = Files.newDirectoryStream(dir);
for (Path path : stream) {
System.out.println(path.getFileName());
if (--i <= 0)
break;
}
long stop = System.currentTimeMillis();
System.out.println(stop - start);
}
}
300003 files in the directory, almost 1.7GB of files, Windows XP, Java 7
and it takes 16 ms to run. Somebody else should try this out on their
computer to see if it works as fast.
..
..
..
01/26/2013 05:46 PM 58,890 9998.txt
01/26/2013 05:46 PM 58,890 9999.txt
01/26/2013 06:31 PM 1,316 FileSystemsTest.class
01/26/2013 06:29 PM 636 FileSystemsTest.java
01/26/2013 05:44 PM 650 MakeFiles.java
30003 File(s) 1,766,702,602 bytes
2 Dir(s) 49,387,085,824 bytes free
C:\Documents and Settings\Knute Johnson\bigdirectory>java FileSystemsTest
0.txt
1.txt
10.txt
100.txt
1000.txt
10000.txt
10001.txt
10002.txt
10003.txt
10004.txt
16
C:\Documents and Settings\Knute Johnson\bigdirectory>
--
Knute Johnson