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 }