Mercurial > hg > digilib-old
view servlet/src/digilib/io/FileOps.java @ 78:e0dcac9c66fa
New servlet version 1.5b.
Mostly cleanup. Global parameters for digilib now in DigilibConfiguration,
per request parameters are now all in DigilibRequest. The DocuImage implementation
can be selected by the configuration docuimage-class.
Pixel-by-pixel view implemented with "mo=clip".
author | robcast |
---|---|
date | Fri, 24 Jan 2003 22:13:49 +0100 |
parents | 5ea1999befd4 |
children | 4e6757e8ccd4 |
line wrap: on
line source
/* FileOps -- Utility class for file operations Digital Image Library servlet components Copyright (C) 2001, 2002 Robert Casties (robcast@mail.berlios.de) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Please read license.txt for the full details. A copy of the GPL may be found at http://www.gnu.org/copyleft/lgpl.html You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package digilib.io; import java.io.*; import java.util.*; import digilib.*; public class FileOps { private Utils util = null; public static String[] fileTypes = { "jpg", "image/jpeg", "jpeg", "image/jpeg", "jp2", "image/jp2", "png", "image/png", "gif", "image/gif", "tif", "image/tiff", "tiff", "image/tiff"}; public FileOps() { util = new Utils(); } public FileOps(Utils u) { util = u; } public void setUtils(Utils u) { util = u; } /** * get the mime type for a file format (by extension) */ public static String mimeForFile(File f) { String fn = f.getName(); for (int i = 0; i < fileTypes.length; i += 2) { if (fn.toLowerCase().endsWith(fileTypes[i])) { return fileTypes[i+1]; } } return null; } /** * get a filehandle for a file or directory name * returns File number n if fn is directory (starts with 1) */ public File getFile(String fn, int n) throws FileOpException { util.dprintln(4, "getFile ("+fn+", "+n+")"); File f = new File(fn); // if fn is a file name then return file if (f.isFile()) { return f; } // if fn is a directory name then open directory if (f.isDirectory()) { File[] fl = f.listFiles(new ImgFileFilter()); Arrays.sort(fl); if ((n > 0) && (n <= fl.length)) { return fl[n - 1]; } } throw new FileOpException("Unable to find file: "+fn); } /** * get the number of files in a directory * (almost the same as getFile) * returns 0 in case of problems */ public int getNumFiles(String fn) throws FileOpException { util.dprintln(4, "getNumFiles ("+fn+")"); File f = new File(fn); // if fn is a file name then return 1 if (f.isFile()) { return 1; } // if fn is a directory name then return the number of files if (f.isDirectory()) { return f.listFiles(new ImgFileFilter()).length; } // then fn must be something strange... return 0; } /** * get a filehandle for a file or directory name out of a list * dirs is a list of base directories, fn is the appended file/dirname * searches dirs until fn exists (backwards if fwd is false) * returns File number n if fn is directory (starts with 1) */ public File getFileVariant(String[] dirs, String fn, int n, boolean fwd) throws FileOpException { util.dprintln(4, "getVariantFile ("+dirs+", "+fn+", "+n+")"); File f = null; int nvar = dirs.length; for (int i = 0; i < nvar; i++) { try { f = getFile(dirs[(fwd) ? i : (nvar-i-1)]+fn, n); } catch (FileOpException e) { f = null; } if (f != null) { return f; } } throw new FileOpException("Unable to find file: "+fn); } /** * get the number of files in a directory * (almost the same as getFileVariant) * returns 0 in case of problems */ public int getNumFilesVariant(String[] dirs, String fn, boolean fwd) throws FileOpException { util.dprintln(4, "getNumFilesVariant ("+dirs+", "+fn+")"); int nf = 0; int nvar = dirs.length; for (int i = 0; i < nvar; i++) { try { nf = getNumFiles(dirs[(fwd) ? i : (nvar-i-1)]+fn); } catch (FileOpException e) { nf = 0; } if (nf > 0) { return nf; } } return 0; } /** * FileFilter for image types (helper class for getFile) */ private class ImgFileFilter implements FileFilter { public boolean accept(File f) { if (f.isFile()) { return (mimeForFile(f) != null); } else { return false; } } } }