View Javadoc

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  }