com.jaeksoft.searchlib.util.FileUtils.java Source code

Java tutorial

Introduction

Here is the source code for com.jaeksoft.searchlib.util.FileUtils.java

Source

/**   
 * License Agreement for OpenSearchServer
 *
 * Copyright (C) 2011-2013 Emmanuel Keller / Jaeksoft
 * 
 * http://www.open-search-server.com
 * 
 * This file is part of OpenSearchServer.
 *
 * OpenSearchServer is free software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 * OpenSearchServer 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 General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSearchServer. 
 *  If not, see <http://www.gnu.org/licenses/>.
 **/

package com.jaeksoft.searchlib.util;

import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.Comparator;

import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.filefilter.AbstractFileFilter;
import org.apache.commons.io.filefilter.FileFileFilter;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.commons.lang.ArrayUtils;

import com.jaeksoft.searchlib.Logging;

public class FileUtils extends org.apache.commons.io.FileUtils {

    public final static class LastModifiedAscComparator implements Comparator<File> {
        @Override
        final public int compare(File f1, File f2) {
            Long l1 = f1.lastModified();
            Long l2 = f2.lastModified();
            return l1.compareTo(l2);
        }
    }

    public final static class LastModifiedDescComparator implements Comparator<File> {
        @Override
        final public int compare(File f1, File f2) {
            Long l1 = f1.lastModified();
            Long l2 = f2.lastModified();
            return l2.compareTo(l1);
        }
    }

    public final static File[] sortByLastModified(File[] files, boolean desc) {
        if (desc)
            Arrays.sort(files, new LastModifiedDescComparator());
        else
            Arrays.sort(files, new LastModifiedAscComparator());
        return files;
    }

    public final static String systemPathToUnix(String filePath) {
        if ("\\".equals(File.separator))
            filePath = FilenameUtils.separatorsToUnix(filePath);
        return filePath;
    }

    public final static String unixToSystemPath(String filePath) {
        if ("\\".equals(File.separator))
            filePath = FilenameUtils.separatorsToWindows(filePath);
        return filePath;
    }

    public final static boolean isSubDirectory(File base, File child) throws IOException {
        base = base.getCanonicalFile();
        child = child.getCanonicalFile();
        File parent = child;
        while (parent != null) {
            if (base.equals(parent))
                return true;
            parent = parent.getParentFile();
        }
        return false;
    }

    public final static String computeMd5(File file) {
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(file);
            return DigestUtils.md5Hex(fis);
        } catch (IOException e) {
            Logging.warn(e);
            return null;
        } finally {
            if (fis != null)
                IOUtils.closeQuietly(fis);
        }
    }

    public final static File createTempDirectory(String prefix, String suffix) throws IOException {
        final File temp;

        temp = File.createTempFile(prefix, suffix);

        if (!temp.delete())
            throw new IOException("Could not delete temp file: " + temp.getAbsolutePath());

        if (!temp.mkdir())
            throw new IOException("Could not create temp directory: " + temp.getAbsolutePath());

        return temp;
    }

    public final static void deleteDirectoryQuietly(File directory) {
        try {
            deleteDirectory(directory);
        } catch (IOException e) {
            Logging.warn(e);
        }
    }

    public static class FileNotHiddenFileFilter extends AbstractFileFilter {

        /** Singleton instance of file filter */
        public static final IOFileFilter FILE = new FileNotHiddenFileFilter();

        protected FileNotHiddenFileFilter() {
        }

        @Override
        final public boolean accept(final File file) {
            return file.isFile() && !file.isHidden();
        }

    }

    public static final boolean containsFile(final File directory, final boolean ignoreHidden) {
        if (!directory.exists())
            return false;
        if (!directory.isDirectory())
            return false;
        final FileFilter fileFilter = ignoreHidden ? FileNotHiddenFileFilter.FILE : FileFileFilter.FILE;
        return !ArrayUtils.isEmpty(directory.listFiles(fileFilter));
    }
}