in src/main/java/org/apache/commons/io/FileSystemUtils.java [296:336]
long freeSpaceUnix(final String path, final boolean kb, final boolean posix, final Duration timeout)
throws IOException {
if (path.isEmpty()) {
throw new IllegalArgumentException("Path must not be empty");
}
// build and run the 'dir' command
String flags = "-";
if (kb) {
flags += "k";
}
if (posix) {
flags += "P";
}
final String[] cmdAttribs = flags.length() > 1 ? new String[] { DF, flags, path } : new String[] { DF, path };
// perform the command, asking for up to 3 lines (header, interesting, overflow)
final List<String> lines = performCommand(cmdAttribs, 3, timeout);
if (lines.size() < 2) {
// unknown problem, throw exception
throw new IOException("Command line '" + DF + "' did not return info as expected for path '" + path + "'- response was " + lines);
}
final String line2 = lines.get(1); // the line we're interested in
// Now, we tokenize the string. The fourth element is what we want.
StringTokenizer tok = new StringTokenizer(line2, " ");
if (tok.countTokens() < 4) {
// could be long Filesystem, thus data on third line
if (tok.countTokens() != 1 || lines.size() < 3) {
throw new IOException("Command line '" + DF + "' did not return data as expected for path '" + path + "'- check path is valid");
}
final String line3 = lines.get(2); // the line may be interested in
tok = new StringTokenizer(line3, " ");
} else {
tok.nextToken(); // Ignore Filesystem
}
tok.nextToken(); // Ignore 1K-blocks
tok.nextToken(); // Ignore Used
final String freeSpace = tok.nextToken();
return parseBytes(freeSpace, path);
}