Пример #1
0
  /**
   * Find free space on the Windows platform using the 'dir' command.
   *
   * @param path the path to get free space for, including the colon
   * @param timeout The timeout amount in milliseconds or no timeout if the value is zero or less
   * @return the amount of free drive space on the drive
   * @throws IOException if an error occurs
   */
  long freeSpaceWindows(String path, final long timeout) throws IOException {
    path = FilenameUtils.normalize(path, false);
    if (path.length() > 0 && path.charAt(0) != '"') {
      path = "\"" + path + "\"";
    }

    // build and run the 'dir' command
    final String[] cmdAttribs = new String[] {"cmd.exe", "/C", "dir /a /-c " + path};

    // read in the output of the command to an ArrayList
    final List<String> lines = performCommand(cmdAttribs, Integer.MAX_VALUE, timeout);

    // now iterate over the lines we just read and find the LAST
    // non-empty line (the free space bytes should be in the last element
    // of the ArrayList anyway, but this will ensure it works even if it's
    // not, still assuming it is on the last non-blank line)
    for (int i = lines.size() - 1; i >= 0; i--) {
      final String line = lines.get(i);
      if (line.length() > 0) {
        return parseDir(line, path);
      }
    }
    // all lines are blank
    throw new IOException(
        "Command line 'dir /-c' did not return any info " + "for path '" + path + "'");
  }
Пример #2
0
  public static boolean directoryContains(File directory, File child) throws IOException {
    if (directory == null) {
      throw new IllegalArgumentException("Directory must not be null");
    }
    if (!directory.isDirectory()) {
      throw new IllegalArgumentException("Not a directory: " + directory);
    }
    if (child == null) {
      return false;
    }
    if ((!directory.exists()) || (!child.exists())) {
      return false;
    }
    String canonicalParent = directory.getCanonicalPath();
    String canonicalChild = child.getCanonicalPath();

    return FilenameUtils.directoryContains(canonicalParent, canonicalChild);
  }
Пример #3
0
 public static boolean isSymlink(File file) throws IOException {
   if (file == null) {
     throw new NullPointerException("File must not be null");
   }
   if (FilenameUtils.isSystemWindows()) {
     return false;
   }
   File fileInCanonicalDir = null;
   if (file.getParent() == null) {
     fileInCanonicalDir = file;
   } else {
     File canonicalDir = file.getParentFile().getCanonicalFile();
     fileInCanonicalDir = new File(canonicalDir, file.getName());
   }
   if (fileInCanonicalDir.getCanonicalFile().equals(fileInCanonicalDir.getAbsoluteFile())) {
     return false;
   }
   return true;
 }
Пример #4
0
  public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    try {
      List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
      for (FileItem item : items) {
        if (item.isFormField()) {
          // Process regular form field (input type="text|radio|checkbox|etc", select, etc).
          String fieldname = item.getFieldName();
          String fieldvalue = item.getString();
          // ... (do your job here)
        } else {
          // Process form file field (input type="file").
          String fieldname = item.getFieldName();
          String filename = FilenameUtils.getName(item.getName());
          InputStream filecontent = item.getInputStream();
          // ... (do your job here)
        }
      }
    } catch (FileUploadException e) {
      throw new ServletException("Cannot parse multipart request.", e);
    }

    // ...
  }
Пример #5
0
/**
 * Enumeration of IO case sensitivity.
 *
 * <p>Different filing systems have different rules for case-sensitivity. Windows is
 * case-insensitive, Unix is case-sensitive.
 *
 * <p>This class captures that difference, providing an enumeration to control how filename
 * comparisons should be performed. It also provides methods that use the enumeration to perform
 * comparisons.
 *
 * <p>Wherever possible, you should use the <code>check</code> methods in this class to compare
 * filenames.
 *
 * @author Stephen Colebourne
 * @version $Id$
 * @since Commons IO 1.3
 */
public final class IOCase implements Serializable {

  /** The constant for case sensitive regardless of operating system. */
  public static final IOCase SENSITIVE = new IOCase("Sensitive", true);

  /** The constant for case insensitive regardless of operating system. */
  public static final IOCase INSENSITIVE = new IOCase("Insensitive", false);

  /**
   * The constant for case sensitivity determined by the current operating system. Windows is
   * case-insensitive when comparing filenames, Unix is case-sensitive.
   *
   * <p>If you derialize this constant of Windows, and deserialize on Unix, or vice versa, then the
   * value of the case-sensitivity flag will change.
   */
  public static final IOCase SYSTEM = new IOCase("System", !FilenameUtils.isSystemWindows());

  /** Serialization version. */
  private static final long serialVersionUID = -6343169151696340687L;

  /** The enumeration name. */
  private final String name;

  /** The sensitivity flag. */
  private final transient boolean sensitive;

  // -----------------------------------------------------------------------
  /**
   * Factory method to create an IOCase from a name.
   *
   * @param name the name to find
   * @return the IOCase object
   * @throws IllegalArgumentException if the name is invalid
   */
  public static IOCase forName(String name) {
    if (IOCase.SENSITIVE.name.equals(name)) {
      return IOCase.SENSITIVE;
    }
    if (IOCase.INSENSITIVE.name.equals(name)) {
      return IOCase.INSENSITIVE;
    }
    if (IOCase.SYSTEM.name.equals(name)) {
      return IOCase.SYSTEM;
    }
    throw new IllegalArgumentException("Invalid IOCase name: " + name);
  }

  // -----------------------------------------------------------------------
  /**
   * Private constructor.
   *
   * @param name the name
   * @param sensitive the sensitivity
   */
  private IOCase(String name, boolean sensitive) {
    this.name = name;
    this.sensitive = sensitive;
  }

  /**
   * Replaces the enumeration from the stream with a real one. This ensures that the correct flag is
   * set for SYSTEM.
   *
   * @return the resolved object
   */
  private Object readResolve() {
    return forName(name);
  }

  // -----------------------------------------------------------------------
  /**
   * Gets the name of the constant.
   *
   * @return the name of the constant
   */
  public String getName() {
    return name;
  }

  /**
   * Does the object represent case sensitive comparison.
   *
   * @return true if case sensitive
   */
  public boolean isCaseSensitive() {
    return sensitive;
  }

  // -----------------------------------------------------------------------
  /**
   * Compares two strings using the case-sensitivity rule.
   *
   * <p>This method mimics {@link String#compareTo} but takes case-sensitivity into account.
   *
   * @param str1 the first string to compare, not null
   * @param str2 the second string to compare, not null
   * @return true if equal using the case rules
   * @throws NullPointerException if either string is null
   */
  public int checkCompareTo(String str1, String str2) {
    if (str1 == null || str2 == null) {
      throw new NullPointerException("The strings must not be null");
    }
    return sensitive ? str1.compareTo(str2) : str1.compareToIgnoreCase(str2);
  }

  /**
   * Compares two strings using the case-sensitivity rule.
   *
   * <p>This method mimics {@link String#equals} but takes case-sensitivity into account.
   *
   * @param str1 the first string to compare, not null
   * @param str2 the second string to compare, not null
   * @return true if equal using the case rules
   * @throws NullPointerException if either string is null
   */
  public boolean checkEquals(String str1, String str2) {
    if (str1 == null || str2 == null) {
      throw new NullPointerException("The strings must not be null");
    }
    return sensitive ? str1.equals(str2) : str1.equalsIgnoreCase(str2);
  }

  /**
   * Checks if one string starts with another using the case-sensitivity rule.
   *
   * <p>This method mimics {@link String#startsWith(String)} but takes case-sensitivity into
   * account.
   *
   * @param str the string to check, not null
   * @param start the start to compare against, not null
   * @return true if equal using the case rules
   * @throws NullPointerException if either string is null
   */
  public boolean checkStartsWith(String str, String start) {
    return str.regionMatches(!sensitive, 0, start, 0, start.length());
  }

  /**
   * Checks if one string ends with another using the case-sensitivity rule.
   *
   * <p>This method mimics {@link String#endsWith} but takes case-sensitivity into account.
   *
   * @param str the string to check, not null
   * @param end the end to compare against, not null
   * @return true if equal using the case rules
   * @throws NullPointerException if either string is null
   */
  public boolean checkEndsWith(String str, String end) {
    int endLen = end.length();
    return str.regionMatches(!sensitive, str.length() - endLen, end, 0, endLen);
  }

  /**
   * Checks if one string contains another at a specific index using the case-sensitivity rule.
   *
   * <p>This method mimics parts of {@link String#regionMatches(boolean, int, String, int, int)} but
   * takes case-sensitivity into account.
   *
   * @param str the string to check, not null
   * @param strStartIndex the index to start at in str
   * @param search the start to search for, not null
   * @return true if equal using the case rules
   * @throws NullPointerException if either string is null
   */
  public boolean checkRegionMatches(String str, int strStartIndex, String search) {
    return str.regionMatches(!sensitive, strStartIndex, search, 0, search.length());
  }

  /**
   * Converts the case of the input String to a standard format. Subsequent operations can then use
   * standard String methods.
   *
   * @param str the string to convert, null returns null
   * @return the lower-case version if case-insensitive
   */
  String convertCase(String str) {
    if (str == null) {
      return null;
    }
    return sensitive ? str : str.toLowerCase();
  }

  // -----------------------------------------------------------------------
  /**
   * Gets a string describing the sensitivity.
   *
   * @return a string describing the sensitivity
   */
  public String toString() {
    return name;
  }
}