View Javadoc
1   /*
2    * This file is part of dependency-check-core.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   *
16   * Copyright (c) 2012 Jeremy Long. All Rights Reserved.
17   */
18  package org.owasp.dependencycheck.utils;
19  
20  import org.slf4j.Logger;
21  import org.slf4j.LoggerFactory;
22  
23  import java.io.File;
24  import java.io.IOException;
25  import java.util.UUID;
26  
27  /**
28   * A collection of utilities for processing information about files.
29   *
30   * @author Jeremy Long
31   */
32  public final class FileUtils {
33  
34      /**
35       * The logger.
36       */
37      private static final Logger LOGGER = LoggerFactory.getLogger(FileUtils.class);
38      /**
39       * Bit bucket for non-Windows systems
40       */
41      private static final String BIT_BUCKET_UNIX = "/dev/null";
42  
43      /**
44       * Bit bucket for Windows systems (yes, only one 'L')
45       */
46      private static final String BIT_BUCKET_WIN = "NUL";
47  
48      /**
49       * Private constructor for a utility class.
50       */
51      private FileUtils() {
52      }
53  
54      /**
55       * Returns the (lowercase) file extension for a specified file.
56       *
57       * @param fileName the file name to retrieve the file extension from.
58       * @return the file extension.
59       */
60      public static String getFileExtension(String fileName) {
61          String ret = null;
62          final int pos = fileName.lastIndexOf(".");
63          if (pos >= 0) {
64              ret = fileName.substring(pos + 1, fileName.length()).toLowerCase();
65          }
66          return ret;
67      }
68  
69      /**
70       * Deletes a file. If the File is a directory it will recursively delete the contents.
71       *
72       * @param file the File to delete
73       * @return true if the file was deleted successfully, otherwise false
74       */
75      public static boolean delete(File file) {
76          boolean success = true;
77          if (!org.apache.commons.io.FileUtils.deleteQuietly(file)) {
78              success = false;
79              LOGGER.debug("Failed to delete file: {}; attempting to delete on exit.", file.getPath());
80              file.deleteOnExit();
81          }
82          return success;
83      }
84  
85      /**
86       * Generates a new temporary file name that is guaranteed to be unique.
87       *
88       * @param prefix the prefix for the file name to generate
89       * @param extension the extension of the generated file name
90       * @return a temporary File
91       * @throws java.io.IOException thrown if the temporary folder could not be created
92       */
93      public static File getTempFile(String prefix, String extension) throws IOException {
94          final File dir = Settings.getTempDirectory();
95          final String tempFileName = String.format("%s%s.%s", prefix, UUID.randomUUID().toString(), extension);
96          final File tempFile = new File(dir, tempFileName);
97          if (tempFile.exists()) {
98              return getTempFile(prefix, extension);
99          }
100         return tempFile;
101     }
102 
103     /**
104      * Return the bit bucket for the OS. '/dev/null' for Unix and 'NUL' for Windows
105      *
106      * @return a String containing the bit bucket
107      */
108     public static String getBitBucket() {
109         if (System.getProperty("os.name").startsWith("Windows")) {
110             return BIT_BUCKET_WIN;
111         } else {
112             return BIT_BUCKET_UNIX;
113         }
114     }
115 }