FileSystemUtil.java
- /*
- * Copyright (c) 2002-2022, City of Paris
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice
- * and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice
- * and the following disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * 3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * License 1.0
- */
- package fr.paris.lutece.util.filesystem;
- import fr.paris.lutece.portal.service.util.AppLogService;
- import fr.paris.lutece.portal.service.util.AppPathService;
- // Java IO
- import java.io.File;
- import java.io.IOException;
- // Java Util
- import java.util.ArrayList;
- import java.util.List;
- import java.util.TreeSet;
- import javax.activation.MimetypesFileTypeMap;
- import org.apache.commons.lang3.ArrayUtils;
- /**
- * This Service is used to manipulate Files and Directories in the File System.
- */
- public final class FileSystemUtil
- {
- private static final String DEFAULT_MIME_TYPE = "application/octet-stream";
- private static final String FILE_SEPARATOR = File.separator;
- private static final String FILE_MIME_TYPE = "WEB-INF" + FILE_SEPARATOR + "conf" + FILE_SEPARATOR + "mime.types";
- /**
- * Private constructor
- */
- private FileSystemUtil( )
- {
- }
- /**
- * Returns the sub-directories of a directory.
- *
- * @param strRoot
- * the root directory.
- * @param strDirectoryRelativePath
- * the parent directory.
- * @throws DirectoryNotFoundException
- * if the directory does not exist.
- * @return The list of sub-directories.
- */
- public static List<File> getSubDirectories( String strRoot, String strDirectoryRelativePath ) throws DirectoryNotFoundException
- {
- // Files' list init
- ArrayList<File> listFiles = new ArrayList<>( );
- // Directory path
- String strDirectory = strRoot + strDirectoryRelativePath;
- // Directory
- File fDirectory = new File( strDirectory );
- if ( !fDirectory.exists( ) )
- {
- throw new DirectoryNotFoundException( );
- }
- File [ ] files = fDirectory.listFiles( );
- if ( ArrayUtils.isEmpty( files ) )
- {
- return listFiles;
- }
- for ( int i = 0; i < files.length; i++ )
- {
- File file = files [i];
- if ( file.isDirectory( ) )
- {
- listFiles.add( file );
- }
- }
- return listFiles;
- }
- /**
- * Returns the files of a directory, alphabetically ordered.
- *
- * @param strRoot
- * The root directory
- * @param strDirectoryRelativePath
- * The directory's path relative to the root directory.
- * @throws DirectoryNotFoundException
- * if the directory does not exist.
- * @return The list of files.
- */
- public static List<File> getFiles( String strRoot, String strDirectoryRelativePath ) throws DirectoryNotFoundException
- {
- // Use a treeset to order files with a comparator
- TreeSet<File> set = new TreeSet<>( new FileNameComparator( ) );
- // Directory path
- String strDirectory = strRoot + strDirectoryRelativePath;
- // Directory
- File fDirectory = new File( strDirectory );
- if ( !fDirectory.exists( ) )
- {
- throw new DirectoryNotFoundException( );
- }
- File [ ] files = fDirectory.listFiles( );
- if ( ArrayUtils.isEmpty( files ) )
- {
- return new ArrayList<>( set );
- }
- for ( int i = 0; i < files.length; i++ )
- {
- File file = files [i];
- if ( file.isFile( ) )
- {
- set.add( file );
- }
- }
- // Convert into a list to preserve the order
- return new ArrayList<>( set );
- }
- /**
- * Return the mimetype of the file depending of his extension and the mime.types file
- *
- * @param strFilename
- * the file name
- * @return the file mime type
- */
- public static String getMIMEType( String strFilename )
- {
- try
- {
- MimetypesFileTypeMap mimeTypeMap = new MimetypesFileTypeMap( AppPathService.getWebAppPath( ) + File.separator + FILE_MIME_TYPE );
- return mimeTypeMap.getContentType( strFilename.toLowerCase( ) );
- }
- catch( IOException e )
- {
- AppLogService.error( e.getMessage( ), e );
- return DEFAULT_MIME_TYPE;
- }
- }
- }