Mercurial > hg > digilib-old
annotate servlet/src/digilib/io/FileOps.java @ 86:997ba69afb81
New version 1.8b1.
With directory and file information cache.
With enhanceRGB method for color correction.
author | robcast |
---|---|
date | Sun, 09 Mar 2003 21:37:27 +0100 |
parents | 4e6757e8ccd4 |
children | a398fc09ba71 |
rev | line source |
---|---|
85 | 1 /* FileOps -- Utility class for file operations |
1 | 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", | |
64
5ea1999befd4
New JAI ImageLoader plugin. Currently uses first beta version of the plugin.
robcast
parents:
56
diff
changeset
|
35 "jp2", "image/jp2", |
1 | 36 "png", "image/png", |
37 "gif", "image/gif", | |
38 "tif", "image/tiff", | |
39 "tiff", "image/tiff"}; | |
40 | |
41 public FileOps() { | |
42 util = new Utils(); | |
43 } | |
44 | |
45 public FileOps(Utils u) { | |
46 util = u; | |
47 } | |
48 | |
49 public void setUtils(Utils u) { | |
50 util = u; | |
51 } | |
52 | |
53 | |
54 /** | |
55 * get the mime type for a file format (by extension) | |
56 */ | |
57 public static String mimeForFile(File f) { | |
58 String fn = f.getName(); | |
59 for (int i = 0; i < fileTypes.length; i += 2) { | |
60 if (fn.toLowerCase().endsWith(fileTypes[i])) { | |
61 return fileTypes[i+1]; | |
62 } | |
63 } | |
64 return null; | |
65 } | |
66 | |
67 /** | |
68 * get a filehandle for a file or directory name | |
69 * returns File number n if fn is directory (starts with 1) | |
70 */ | |
71 public File getFile(String fn, int n) throws FileOpException { | |
72 util.dprintln(4, "getFile ("+fn+", "+n+")"); | |
73 | |
74 File f = new File(fn); | |
75 // if fn is a file name then return file | |
76 if (f.isFile()) { | |
77 return f; | |
78 } | |
79 // if fn is a directory name then open directory | |
80 if (f.isDirectory()) { | |
86 | 81 File[] fl = f.listFiles(new ImageFileFilter()); |
1 | 82 Arrays.sort(fl); |
83 if ((n > 0) && (n <= fl.length)) { | |
84 return fl[n - 1]; | |
85 } | |
86 } | |
87 throw new FileOpException("Unable to find file: "+fn); | |
88 } | |
89 | |
90 /** | |
91 * get the number of files in a directory | |
92 * (almost the same as getFile) | |
93 * returns 0 in case of problems | |
94 */ | |
95 public int getNumFiles(String fn) throws FileOpException { | |
96 util.dprintln(4, "getNumFiles ("+fn+")"); | |
97 | |
98 File f = new File(fn); | |
99 // if fn is a file name then return 1 | |
100 if (f.isFile()) { | |
101 return 1; | |
102 } | |
103 // if fn is a directory name then return the number of files | |
104 if (f.isDirectory()) { | |
86 | 105 return f.listFiles(new ImageFileFilter()).length; |
1 | 106 } |
107 // then fn must be something strange... | |
108 return 0; | |
109 } | |
110 | |
111 | |
112 /** | |
113 * get a filehandle for a file or directory name out of a list | |
114 * dirs is a list of base directories, fn is the appended file/dirname | |
115 * searches dirs until fn exists (backwards if fwd is false) | |
116 * returns File number n if fn is directory (starts with 1) | |
117 */ | |
118 public File getFileVariant(String[] dirs, String fn, int n, boolean fwd) throws FileOpException { | |
119 util.dprintln(4, "getVariantFile ("+dirs+", "+fn+", "+n+")"); | |
120 | |
121 File f = null; | |
56
2ea78a56ecf8
Use system specific pathSeparator for documents paths (; on Win).
robcast
parents:
1
diff
changeset
|
122 int nvar = dirs.length; |
1 | 123 |
56
2ea78a56ecf8
Use system specific pathSeparator for documents paths (; on Win).
robcast
parents:
1
diff
changeset
|
124 for (int i = 0; i < nvar; i++) { |
1 | 125 try { |
56
2ea78a56ecf8
Use system specific pathSeparator for documents paths (; on Win).
robcast
parents:
1
diff
changeset
|
126 f = getFile(dirs[(fwd) ? i : (nvar-i-1)]+fn, n); |
1 | 127 } catch (FileOpException e) { |
128 f = null; | |
129 } | |
130 if (f != null) { | |
131 return f; | |
132 } | |
133 } | |
134 throw new FileOpException("Unable to find file: "+fn); | |
135 } | |
136 | |
137 /** | |
138 * get the number of files in a directory | |
139 * (almost the same as getFileVariant) | |
140 * returns 0 in case of problems | |
141 */ | |
142 public int getNumFilesVariant(String[] dirs, String fn, boolean fwd) throws FileOpException { | |
143 util.dprintln(4, "getNumFilesVariant ("+dirs+", "+fn+")"); | |
144 | |
145 int nf = 0; | |
56
2ea78a56ecf8
Use system specific pathSeparator for documents paths (; on Win).
robcast
parents:
1
diff
changeset
|
146 int nvar = dirs.length; |
1 | 147 |
56
2ea78a56ecf8
Use system specific pathSeparator for documents paths (; on Win).
robcast
parents:
1
diff
changeset
|
148 for (int i = 0; i < nvar; i++) { |
1 | 149 try { |
56
2ea78a56ecf8
Use system specific pathSeparator for documents paths (; on Win).
robcast
parents:
1
diff
changeset
|
150 nf = getNumFiles(dirs[(fwd) ? i : (nvar-i-1)]+fn); |
1 | 151 } catch (FileOpException e) { |
152 nf = 0; | |
153 } | |
154 if (nf > 0) { | |
155 return nf; | |
156 } | |
157 } | |
158 return 0; | |
159 } | |
160 | |
161 /** | |
162 * FileFilter for image types (helper class for getFile) | |
163 */ | |
86 | 164 static class ImageFileFilter implements FileFilter { |
1 | 165 |
166 public boolean accept(File f) { | |
167 if (f.isFile()) { | |
168 return (mimeForFile(f) != null); | |
169 } else { | |
170 return false; | |
171 } | |
172 } | |
173 } | |
174 | |
175 } |