1 /** 2 * 3 * Copyright 2005 The Apache Software Foundation 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 package org.apache.geronimo.common; 18 19 import java.io.File; 20 import java.io.DataInputStream; 21 import java.io.BufferedInputStream; 22 import java.io.FileInputStream; 23 import java.io.IOException; 24 import java.util.zip.ZipFile; 25 26 /** 27 * Utility functions related to Files. 28 * 29 * @version $Rev: 437254 $ $Date: 2006-08-26 17:07:55 -0700 (Sat, 26 Aug 2006) $ 30 */ 31 public class FileUtils { 32 /** 33 * Determine whether a file is a JAR File. 34 */ 35 public static boolean isJarFile(File file) throws IOException { 36 if(!isZipFile(file)) { 37 return false; 38 } 39 ZipFile zip = new ZipFile(file); 40 boolean manifest = zip.getEntry("META-INF/MANIFEST.MF") != null; 41 zip.close(); 42 return manifest; 43 } 44 45 /** 46 * Determine whether a file is a ZIP File. 47 */ 48 public static boolean isZipFile(File file) throws IOException { 49 if(file.isDirectory()) { 50 return false; 51 } 52 if(!file.canRead()) { 53 throw new IOException("Cannot read file "+file.getAbsolutePath()); 54 } 55 if(file.length() < 4) { 56 return false; 57 } 58 DataInputStream in = new DataInputStream(new BufferedInputStream(new FileInputStream(file))); 59 int test = in.readInt(); 60 in.close(); 61 return test == 0x504b0304; 62 } 63 64 }