1
|
1 /* FileOps -- Utility class for file operations
|
|
2
|
|
3 Digital Image Library servlet components
|
|
4
|
|
5 Copyright (C) 2001, 2002 Robert Casties (robcast@mail.berlios.de)
|
|
6
|
|
7 This program is free software; you can redistribute it and/or modify it
|
|
8 under the terms of the GNU General Public License as published by the
|
|
9 Free Software Foundation; either version 2 of the License, or (at your
|
|
10 option) any later version.
|
|
11
|
|
12 Please read license.txt for the full details. A copy of the GPL
|
|
13 may be found at http://www.gnu.org/copyleft/lgpl.html
|
|
14
|
|
15 You should have received a copy of the GNU General Public License
|
|
16 along with this program; if not, write to the Free Software
|
|
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
18
|
|
19 */
|
|
20
|
|
21 package digilib.io;
|
|
22
|
|
23 import java.io.*;
|
|
24 import java.util.*;
|
|
25
|
|
26 import digilib.*;
|
|
27
|
|
28
|
|
29 public class FileOps {
|
|
30
|
|
31 private Utils util = null;
|
|
32 public static String[] fileTypes = {
|
|
33 "jpg", "image/jpeg",
|
|
34 "jpeg", "image/jpeg",
|
|
35 "png", "image/png",
|
|
36 "gif", "image/gif",
|
|
37 "tif", "image/tiff",
|
|
38 "tiff", "image/tiff"};
|
|
39
|
|
40 public FileOps() {
|
|
41 util = new Utils();
|
|
42 }
|
|
43
|
|
44 public FileOps(Utils u) {
|
|
45 util = u;
|
|
46 }
|
|
47
|
|
48 public void setUtils(Utils u) {
|
|
49 util = u;
|
|
50 }
|
|
51
|
|
52
|
|
53 /**
|
|
54 * get the mime type for a file format (by extension)
|
|
55 */
|
|
56 public static String mimeForFile(File f) {
|
|
57 String fn = f.getName();
|
|
58 for (int i = 0; i < fileTypes.length; i += 2) {
|
|
59 if (fn.toLowerCase().endsWith(fileTypes[i])) {
|
|
60 return fileTypes[i+1];
|
|
61 }
|
|
62 }
|
|
63 return null;
|
|
64 }
|
|
65
|
|
66 /**
|
|
67 * get a filehandle for a file or directory name
|
|
68 * returns File number n if fn is directory (starts with 1)
|
|
69 */
|
|
70 public File getFile(String fn, int n) throws FileOpException {
|
|
71 util.dprintln(4, "getFile ("+fn+", "+n+")");
|
|
72
|
|
73 File f = new File(fn);
|
|
74 // if fn is a file name then return file
|
|
75 if (f.isFile()) {
|
|
76 return f;
|
|
77 }
|
|
78 // if fn is a directory name then open directory
|
|
79 if (f.isDirectory()) {
|
|
80 File[] fl = f.listFiles(new ImgFileFilter());
|
|
81 Arrays.sort(fl);
|
|
82 if ((n > 0) && (n <= fl.length)) {
|
|
83 return fl[n - 1];
|
|
84 }
|
|
85 }
|
|
86 throw new FileOpException("Unable to find file: "+fn);
|
|
87 }
|
|
88
|
|
89 /**
|
|
90 * get the number of files in a directory
|
|
91 * (almost the same as getFile)
|
|
92 * returns 0 in case of problems
|
|
93 */
|
|
94 public int getNumFiles(String fn) throws FileOpException {
|
|
95 util.dprintln(4, "getNumFiles ("+fn+")");
|
|
96
|
|
97 File f = new File(fn);
|
|
98 // if fn is a file name then return 1
|
|
99 if (f.isFile()) {
|
|
100 return 1;
|
|
101 }
|
|
102 // if fn is a directory name then return the number of files
|
|
103 if (f.isDirectory()) {
|
|
104 return f.listFiles(new ImgFileFilter()).length;
|
|
105 }
|
|
106 // then fn must be something strange...
|
|
107 return 0;
|
|
108 }
|
|
109
|
|
110
|
|
111 /**
|
|
112 * get a filehandle for a file or directory name out of a list
|
|
113 * dirs is a list of base directories, fn is the appended file/dirname
|
|
114 * searches dirs until fn exists (backwards if fwd is false)
|
|
115 * returns File number n if fn is directory (starts with 1)
|
|
116 */
|
|
117 public File getFileVariant(String[] dirs, String fn, int n, boolean fwd) throws FileOpException {
|
|
118 util.dprintln(4, "getVariantFile ("+dirs+", "+fn+", "+n+")");
|
|
119
|
|
120 File f = null;
|
|
121 int start = 0;
|
|
122 int inc = 1;
|
|
123 int end = dirs.length;
|
|
124 if (fwd == false) {
|
|
125 start = dirs.length - 1;
|
|
126 inc = -1;
|
|
127 end = 0;
|
|
128 }
|
|
129
|
|
130 for (int i = start; i != end; i += inc) {
|
|
131 try {
|
|
132 f = getFile(dirs[i]+fn, n);
|
|
133 } catch (FileOpException e) {
|
|
134 f = null;
|
|
135 }
|
|
136 if (f != null) {
|
|
137 return f;
|
|
138 }
|
|
139 }
|
|
140 throw new FileOpException("Unable to find file: "+fn);
|
|
141 }
|
|
142
|
|
143 /**
|
|
144 * get the number of files in a directory
|
|
145 * (almost the same as getFileVariant)
|
|
146 * returns 0 in case of problems
|
|
147 */
|
|
148 public int getNumFilesVariant(String[] dirs, String fn, boolean fwd) throws FileOpException {
|
|
149 util.dprintln(4, "getNumFilesVariant ("+dirs+", "+fn+")");
|
|
150
|
|
151 int nf = 0;
|
|
152 int start = 0;
|
|
153 int inc = 1;
|
|
154 int end = dirs.length;
|
|
155 if (fwd == false) {
|
|
156 start = dirs.length - 1;
|
|
157 inc = -1;
|
|
158 end = 0;
|
|
159 }
|
|
160
|
|
161 for (int i = start; i != end; i += inc) {
|
|
162 try {
|
|
163 nf = getNumFiles(dirs[i]+fn);
|
|
164 } catch (FileOpException e) {
|
|
165 nf = 0;
|
|
166 }
|
|
167 if (nf > 0) {
|
|
168 return nf;
|
|
169 }
|
|
170 }
|
|
171 return 0;
|
|
172 }
|
|
173
|
|
174 /**
|
|
175 * FileFilter for image types (helper class for getFile)
|
|
176 */
|
|
177 private class ImgFileFilter implements FileFilter {
|
|
178
|
|
179 public boolean accept(File f) {
|
|
180 if (f.isFile()) {
|
|
181 return (mimeForFile(f) != null);
|
|
182 } else {
|
|
183 return false;
|
|
184 }
|
|
185 }
|
|
186 }
|
|
187
|
|
188 }
|