Skip to content

Commit 03b8397

Browse files
committed
Add FileListProvider
This command allows to get a list of files with given extensions from an input folder, optionally recursively.
1 parent afe038c commit 03b8397

1 file changed

Lines changed: 76 additions & 0 deletions

File tree

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package org.scijava.plugins.commands.io;
2+
3+
import java.io.File;
4+
import java.io.FileFilter;
5+
import java.io.IOException;
6+
import java.nio.file.Files;
7+
8+
import org.scijava.ItemIO;
9+
import org.scijava.command.Command;
10+
import org.scijava.command.ContextCommand;
11+
import org.scijava.log.LogService;
12+
import org.scijava.plugin.Parameter;
13+
import org.scijava.plugin.Plugin;
14+
import org.scijava.widget.FileWidget;
15+
16+
/**
17+
* Returns a list of files with the given extensions
18+
*
19+
* @author Jan Eglinger
20+
*/
21+
@Plugin(type = Command.class, headless = true)
22+
public class FileListProvider extends ContextCommand {
23+
24+
@Parameter
25+
private LogService logService;
26+
27+
@Parameter(style = FileWidget.DIRECTORY_STYLE)
28+
private File inputFolder;
29+
30+
@Parameter(required = false)
31+
private String extensions = "";
32+
33+
@Parameter(required = false)
34+
private boolean recursive = true;
35+
36+
@Parameter(type = ItemIO.OUTPUT)
37+
private File[] files;
38+
39+
@Override
40+
public void run() {
41+
String[] extensionList = extensions.trim().split("/");
42+
43+
// Create FileFilter from extensions
44+
FileFilter filter = new FileFilter() {
45+
46+
@Override
47+
public boolean accept(File pathname) {
48+
if (extensionList.length == 0)
49+
return pathname.isFile();
50+
51+
for (String ext : extensionList) {
52+
if (pathname.getName().toLowerCase()
53+
.endsWith(ext.toLowerCase())
54+
&& pathname.isFile())
55+
return true;
56+
}
57+
return false;
58+
}
59+
};
60+
61+
if (recursive) {
62+
// Recursively list files
63+
try {
64+
files = (Files.walk(inputFolder.toPath()).filter(path -> filter
65+
.accept(path.toFile()))).map(path -> path.toFile())
66+
.toArray(File[]::new);
67+
} catch (IOException exc) {
68+
logService
69+
.error("Error when trying to retrieve file list", exc);
70+
}
71+
} else {
72+
// Get non-recursive only for this folder
73+
files = inputFolder.listFiles(filter);
74+
}
75+
}
76+
}

0 commit comments

Comments
 (0)