bbbaa6812822ba89f37b531a6c18e0061cc6af87
[mir.git] / source / mir / util / FileFunctions.java
1 /*
2  * Copyright (C) 2001, 2002 The Mir-coders group
3  *
4  * This file is part of Mir.
5  *
6  * Mir is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * Mir is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with Mir; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  *
20  * In addition, as a special exception, The Mir-coders gives permission to link
21  * the code of this program with  any library licensed under the Apache Software License,
22  * The Sun (tm) Java Advanced Imaging library (JAI), The Sun JIMI library
23  * (or with modified versions of the above that use the same license as the above),
24  * and distribute linked combinations including the two.  You must obey the
25  * GNU General Public License in all respects for all of the code used other than
26  * the above mentioned libraries.  If you modify this file, you may extend this
27  * exception to your version of the file, but you are not obligated to do so.
28  * If you do not wish to do so, delete this exception statement from your version.
29  */
30 package mir.util;
31
32 import gnu.regexp.RE;
33
34 import java.io.BufferedInputStream;
35 import java.io.BufferedOutputStream;
36 import java.io.File;
37 import java.io.FileInputStream;
38 import java.io.FileOutputStream;
39 import java.io.FilenameFilter;
40 import java.io.IOException;
41 import java.util.Arrays;
42 import java.util.List;
43 import java.util.Vector;
44
45 public class FileFunctions {
46   protected static final int FILE_COPY_BUFFER_SIZE = 65536;
47
48   private FileFunctions() {
49   }
50
51   public static void copyFile(File aSourceFile, File aDestinationFile) throws IOException {
52     BufferedInputStream inputStream;
53     BufferedOutputStream outputStream;
54     int nrBytesRead;
55     byte[] buffer = new byte[FILE_COPY_BUFFER_SIZE];
56
57     inputStream = new BufferedInputStream(
58       new FileInputStream(aSourceFile));
59     try {
60       File directory = new File(aDestinationFile.getParent());
61         if (directory!=null && !directory.exists()){
62           directory.mkdirs();
63       }
64       outputStream = new BufferedOutputStream(
65         new FileOutputStream(aDestinationFile),8192);
66       try {
67         do {
68           nrBytesRead = inputStream.read(buffer);
69           if (nrBytesRead>0)
70             outputStream.write(buffer, 0, nrBytesRead);
71         }
72         while (nrBytesRead>=0);
73       }
74       finally {
75         outputStream.close();
76       }
77     }
78     finally {
79       inputStream.close();
80     }
81   }
82
83   public static void copyDirectory(File aSourceDirectory, File aDestinationDirectory) throws IOException {
84     int i;
85     File sourceFile;
86     File destinationFile;
87     File[] files = aSourceDirectory.listFiles();
88
89     if (!aDestinationDirectory.exists())
90       aDestinationDirectory.mkdirs();
91
92     for (i=0; i<files.length; i++) {
93       sourceFile = files[i];
94       destinationFile=new File(aDestinationDirectory, sourceFile.getName());
95       if (sourceFile.isDirectory()) {
96         if (!destinationFile.exists())
97           destinationFile.mkdir();
98         copyDirectory(sourceFile, destinationFile);
99       }
100       else {
101         copyFile(sourceFile, destinationFile);
102       }
103     }
104   }
105
106   public static void copy(File aSource, File aDestination) throws IOException {
107     if (aSource.isDirectory()) {
108       copyDirectory(aSource, aDestination);
109     }
110     else if (aDestination.isDirectory()) {
111       copyFile(aSource, new File(aDestination, aSource.getName()));
112     }
113     else {
114       copyFile(aSource, aDestination);
115     }
116   }
117
118   public static class RegExpFileFilter implements FilenameFilter {
119     private RE expression;
120
121     public RegExpFileFilter(String anExpression) {
122       try {
123         expression = new RE(anExpression);
124       }
125       catch (Throwable t) {
126         throw new RuntimeException(t.getMessage());
127       }
128     }
129
130     public boolean accept(File aDir, String aName) {
131       return expression.isMatch(aName) && !new File(aDir, aName).isDirectory();
132     }
133   }
134
135   public static class DirectoryFilter implements FilenameFilter {
136     public DirectoryFilter() {
137     }
138
139     public boolean accept(File aDir, String aName) {
140       return new File(aDir, aName).isDirectory();
141     }
142
143   }
144
145   public static List getDirectoryContentsAsList(File aDirectory, FilenameFilter aFilter) {
146     Object[] contents = aDirectory.list(aFilter);
147     if (contents==null)
148       return new Vector();
149     else
150       return Arrays.asList(contents);
151   }
152
153
154 }