Utilities for reading/writing data from/to files in Java. Includes:
- Builders and utility methods for external process execution (i.e. runtime.exec(...))
- Filtered FileVisitor builders which can be passed to Files.walkFileTree(...)
- Rolling file renamer for creating log files or file snapshots/backups
- File reader utility class for reading files using internal cache which is reused between file reads with smart buffer resizing to minimize garbage generated
Take a look at the twg2.io.test
package for some examples of how the API can be used.
Reuses internal buffers to allow for nearly allocation free file loading on subsequent files read:
String text = FileReadUtil.threadLocalInst().readString(new File(...));
Example - recursively load files filtered by directory and file extension:
public static List<Path> listFiles(Path projectDir) throws IOException {
FileVisitorUtil.Builder visitorBldr = new FileVisitorUtil.Builder();
visitorBldr.getPreVisitDirectoryFilter()
.addDirectoryNameFilters(false, "/debug", "/tasks", "/src", "/tests");
visitorBldr.getVisitFileFilter()
.addFileExtensionFilters(true, new String[] { ".java", ".txt", ".properties" })
.setTrackMatches(true);
FileVisitorUtil.Cache visitorCache = visitorBldr.build();
Files.walkFileTree(projectDir, visitorCache.getFileVisitor());
return visitorCache.getVisitFileFilterCache().getMatches();
}
Example - run a process asynchronously:
public static void runCommand() throws IOException {
Runtime runtime = Runtime.getRuntime();
LogService log = new LogServiceImpl(Level.ALL, System.out, LogPrefixFormat.NONE);
ProcessIoStreamFactory streamFactory = new ProcessIoStreamFactory.MemoryStreams();
OutputStream outStream = streamFactory.openOutputStream();
OutputStream errStream = streamFactory.openErrorOutputStream();
ExecuteCmd exeCmd = ExecuteCmd.execAsync("...", runtime, outStream, errStream, log);
// do cool stuff with the resulting output and error streams
// or wait for the task to complete and get the result
ExecuteCmd.Result result = ExecuteCmd.finishSync(exeCmd);
}