25f3545c8953ef420a0117fa8f3a3817bbc3335c
[debian/openrocket] / src / net / sf / openrocket / file / RegularDirectoryIterator.java
1 package net.sf.openrocket.file;
2
3 import java.io.BufferedInputStream;
4 import java.io.File;
5 import java.io.FileFilter;
6 import java.io.FileInputStream;
7 import java.io.FileNotFoundException;
8 import java.io.IOException;
9 import java.io.InputStream;
10
11 import net.sf.openrocket.logging.LogHelper;
12 import net.sf.openrocket.startup.Application;
13 import net.sf.openrocket.util.Pair;
14
15 /**
16  * A DirectoryIterator that scans for files within a directory in the file system.
17  * 
18  * TODO: MEDIUM: Does not support recursive search.
19  * 
20  * @author Sampo Niskanen <sampo.niskanen@iki.fi>
21  */
22 public class RegularDirectoryIterator extends DirectoryIterator {
23
24         private static final LogHelper logger = Application.getLogger();
25
26         private final File[] files;
27         private int position = 0;
28         
29         /**
30          * Sole constructor.
31          * 
32          * @param directory             the directory to read.
33          * @param filter                the filter for selecting files.
34          * @throws IOException  if the directory cannot be read.
35          */
36         public RegularDirectoryIterator(File directory, FileFilter filter) 
37                         throws IOException {
38                 this.files = directory.listFiles(filter);
39                 if (this.files == null) {
40                         throw new IOException("not a directory or IOException occurred when listing files " +
41                                         "from " + directory);
42                 }
43         }
44         
45         
46         
47         @Override
48         protected Pair<String, InputStream> findNext() {
49                 for (; position < files.length; position++) {
50                         try {
51                                 InputStream is = new BufferedInputStream(new FileInputStream(files[position]));
52                                 position++;
53                                 return new Pair<String, InputStream>(files[position-1].getName(), is);
54                         } catch (FileNotFoundException e) {
55                                 logger.warn("Error opening file " + files[position], e);
56                         }
57                 }
58                 return null;
59         }
60
61 }