/*
* The Kuali Financial System, a comprehensive financial management system for higher education.
*
* Copyright 2005-2014 The Kuali Foundation
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.kuali.kfs.sys;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import org.apache.commons.io.FileUtils;
/**
* This class provides a set of facilities that can be used to work with files
*/
public class FileUtil {
private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(FileUtil.class);
private static Set<String> createdDirectory = new TreeSet<String>();
/**
* In directory looks for a pattern matching filenameFilter and returns the filename with the highest lastModified()
* @param directory
* @param filenameFilter to filter filenames in batchFileDirectoryName for
* @return File with highest lastModified()
*/
public static File getNewestFile(File directory, FilenameFilter filenameFilter) {
File newestFile = null;
File[] directoryListing = directory.listFiles(filenameFilter);
if (directoryListing == null || directoryListing.length == 0) {
return null;
} else {
for (int i = 0; i < directoryListing.length; i++) {
File file = directoryListing[i];
if (newestFile == null) {
newestFile = file;
} else {
if (newestFile.lastModified() < file.lastModified()){
newestFile = file;
}
}
}
}
return newestFile;
}
/**
* Check and create (if not exists) each of the directory path from param
* This is for creating single directory
*
* @param directoryPath
*/
public static void createDirectory(final String directoryPath) {
createDirectories(new ArrayList<String>(){{add(directoryPath);}});
}
/**
* Check and create (if not exists) each of the directory path from param
*
* @param directoryPathList
*/
public static void createDirectories(List<String> directoryPathList) {
File directoryToCheck;
for (String path : directoryPathList){
if (path != null) {
directoryToCheck = new File(path);
if (!directoryToCheck.isDirectory() && !createdDirectory.contains(path)) {
try {
FileUtils.forceMkdir(directoryToCheck);
LOG.debug("[" + path + "] has been created successfully");
//store locally to avoid future redundant IO check
createdDirectory.add(path);
}
catch (IOException ex) {
LOG.warn("Unable to create directory [" + path + "]", ex);
}
}
}
}
}
}