|  | /************************************************************** | 
|  | * | 
|  | * Licensed to the Apache Software Foundation (ASF) under one | 
|  | * or more contributor license agreements.  See the NOTICE file | 
|  | * distributed with this work for additional information | 
|  | * regarding copyright ownership.  The ASF licenses this file | 
|  | * to you under the Apache License, Version 2.0 (the | 
|  | * "License"); you may not use this file except in compliance | 
|  | * with the License.  You may obtain a copy of the License at | 
|  | * | 
|  | *   http://www.apache.org/licenses/LICENSE-2.0 | 
|  | * | 
|  | * Unless required by applicable law or agreed to in writing, | 
|  | * software distributed under the License is distributed on an | 
|  | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | 
|  | * KIND, either express or implied.  See the License for the | 
|  | * specific language governing permissions and limitations | 
|  | * under the License. | 
|  | * | 
|  | *************************************************************/ | 
|  |  | 
|  |  | 
|  |  | 
|  | package graphical; | 
|  |  | 
|  | import java.io.File; | 
|  | import java.io.FileFilter; | 
|  | import java.util.ArrayList; | 
|  |  | 
|  | /** | 
|  | * Helper for directory access | 
|  | * | 
|  | * @author lla@openoffice.org | 
|  | */ | 
|  | public class DirectoryHelper | 
|  | { | 
|  | ArrayList<String> m_aFileList = new ArrayList<String>(); | 
|  | boolean m_bRecursiveIsAllowed = true; | 
|  |  | 
|  | void setRecursiveIsAllowed(boolean _bValue) | 
|  | { | 
|  | m_bRecursiveIsAllowed = _bValue; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Traverse over a given directory, and filter with a given FileFilter | 
|  | * object and gives back the deep directory as a Object[] list, which | 
|  | * contain a String object for every directory entry. | 
|  | * | 
|  | * <B>Example</B> | 
|  | * List directory /bin, filter out all files which ends with '.prn' | 
|  | * | 
|  | *  FileFilter aFileFilter = new FileFilter() | 
|  | *  { | 
|  | *      public boolean accept( File pathname ) | 
|  | *          { | 
|  | *              if (pathname.getName().endsWith(".prn")) | 
|  | *              { | 
|  | *                  return false; | 
|  | *              } | 
|  | *              return true; | 
|  | *          } | 
|  | *  }; | 
|  | * | 
|  | * Object[] aList = DirectoryHelper.traverse("/bin", aFileFilter); | 
|  | * for (int i=0;i<aList.length;i++) | 
|  | * { | 
|  | *     String aEntry = (String)aList[i]; | 
|  | *     System.out.println(aEntry); | 
|  | * } | 
|  | * | 
|  | * @param _sDirectory | 
|  | * @param _aFileFilter | 
|  | * @param _bRecursiveIsAllowed | 
|  | * @return list of directories | 
|  | */ | 
|  | public static Object[] traverse( String _sDirectory, FileFilter _aFileFilter, boolean _bRecursiveIsAllowed ) | 
|  | { | 
|  | DirectoryHelper a = new DirectoryHelper(); | 
|  | a.setRecursiveIsAllowed(_bRecursiveIsAllowed); | 
|  | a.traverse_impl(_sDirectory, _aFileFilter); | 
|  | return a.m_aFileList.toArray(); | 
|  | } | 
|  |  | 
|  | public static Object[] traverse( String _sDirectory, boolean _bRecursiveIsAllowed ) | 
|  | { | 
|  | DirectoryHelper a = new DirectoryHelper(); | 
|  | a.setRecursiveIsAllowed(_bRecursiveIsAllowed); | 
|  | a.traverse_impl(_sDirectory, null); | 
|  | return a.m_aFileList.toArray(); | 
|  | } | 
|  |  | 
|  | void traverse_impl( String afileDirectory, FileFilter _aFileFilter ) | 
|  | { | 
|  | File fileDirectory = new File(afileDirectory); | 
|  | // Testing, if the file is a directory, and if so, it throws an exception | 
|  | if ( !fileDirectory.isDirectory() ) | 
|  | { | 
|  | throw new IllegalArgumentException( "not a directory: " + fileDirectory.getName() ); | 
|  | } | 
|  |  | 
|  | // Getting all files and directories in the current directory | 
|  | File[] aDirEntries; | 
|  | if (_aFileFilter != null) | 
|  | { | 
|  | aDirEntries = fileDirectory.listFiles(_aFileFilter); | 
|  | } | 
|  | else | 
|  | { | 
|  | aDirEntries = fileDirectory.listFiles(); | 
|  | } | 
|  |  | 
|  | // Iterating for each file and directory | 
|  | for ( int i = 0; i < aDirEntries.length; ++i ) | 
|  | { | 
|  | if ( aDirEntries[ i ].isDirectory() ) | 
|  | { | 
|  | if (m_bRecursiveIsAllowed == true) | 
|  | { | 
|  | // Recursive call for the new directory | 
|  | traverse_impl( aDirEntries[ i ].getAbsolutePath(), _aFileFilter ); | 
|  | } | 
|  | } | 
|  | else | 
|  | { | 
|  | // adding file to List | 
|  | try | 
|  | { | 
|  | // Composing the URL by replacing all backslashs | 
|  | // String stringUrl = "file:///" + aFileEntries[ i ].getAbsolutePath().replace( '\\', '/' ); | 
|  | String aStr = aDirEntries[ i ].getAbsolutePath(); | 
|  | m_aFileList.add(aStr); | 
|  | } | 
|  | catch( Exception exception ) | 
|  | { | 
|  | exception.printStackTrace(); | 
|  | break; | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | // tests | 
|  | // public static void main(String[] args) | 
|  | //     { | 
|  | //         String sDirectory = "/misc/convwatch/gfxcmp/data/doc-pool/demo"; | 
|  | //         Object[] aDirectoryList = DirectoryHelper.traverse( sDirectory, false ); | 
|  | // | 
|  | //         for (int i=0;i<aDirectoryList.length;i++) | 
|  | //         { | 
|  | //             String sEntry = (String)aDirectoryList[i]; | 
|  | //             System.out.println(sEntry); | 
|  | //         } | 
|  | //     } | 
|  | } | 
|  |  |