Exemplo n.º 1
0
  /**
   * Delete an existing file.
   *
   * @param aFile The file to be deleted. May not be <code>null</code>.
   * @return A non-<code>null</code> error code.
   */
  @Nonnull
  public static FileIOError deleteFile(@Nonnull final File aFile) {
    ValueEnforcer.notNull(aFile, "File");

    if (!FileUtils.existsFile(aFile))
      return EFileIOErrorCode.SOURCE_DOES_NOT_EXIST.getAsIOError(
          EFileIOOperation.DELETE_FILE, aFile);

    // Is the parent directory writable?
    final File aParentDir = aFile.getParentFile();
    if (aParentDir != null && !FileUtils.canWrite(aParentDir))
      return EFileIOErrorCode.SOURCE_PARENT_NOT_WRITABLE.getAsIOError(
          EFileIOOperation.DELETE_FILE, aFile);

    try {
      // delete may return true even so it internally failed!
      final EFileIOErrorCode eError =
          aFile.delete() && !aFile.exists()
              ? EFileIOErrorCode.NO_ERROR
              : EFileIOErrorCode.OPERATION_FAILED;
      return eError.getAsIOError(EFileIOOperation.DELETE_FILE, aFile);
    } catch (final SecurityException ex) {
      return EFileIOErrorCode.getAsIOError(EFileIOOperation.DELETE_FILE, ex);
    }
  }
Exemplo n.º 2
0
  /**
   * Delete an existing directory. The directory needs to be empty before it can be deleted.
   *
   * @param aDir The directory to be deleted. May not be <code>null</code>.
   * @return A non-<code>null</code> error code.
   */
  @Nonnull
  public static FileIOError deleteDir(@Nonnull final File aDir) {
    ValueEnforcer.notNull(aDir, "Directory");

    // Does the directory not exist?
    if (!FileUtils.existsDir(aDir))
      return EFileIOErrorCode.SOURCE_DOES_NOT_EXIST.getAsIOError(EFileIOOperation.DELETE_DIR, aDir);

    if (isWarnOnDeleteRoot()) {
      // Check that we're not deleting the complete hard drive...
      if (aDir.getAbsoluteFile().getParent() == null)
        throw new IllegalArgumentException(
            "Aren't we deleting the full drive: '" + aDir.getAbsolutePath() + "'");
    }

    // Is the parent directory writable?
    final File aParentDir = aDir.getParentFile();
    if (aParentDir != null && !FileUtils.canWrite(aParentDir))
      return EFileIOErrorCode.SOURCE_PARENT_NOT_WRITABLE.getAsIOError(
          EFileIOOperation.DELETE_DIR, aDir);

    try {
      // delete may return true even so it internally failed!
      final EFileIOErrorCode eError =
          aDir.delete() && !aDir.exists()
              ? EFileIOErrorCode.NO_ERROR
              : EFileIOErrorCode.OPERATION_FAILED;
      return eError.getAsIOError(EFileIOOperation.DELETE_DIR, aDir);
    } catch (final SecurityException ex) {
      return EFileIOErrorCode.getAsIOError(EFileIOOperation.DELETE_DIR, ex);
    }
  }
Exemplo n.º 3
0
  /**
   * Rename a directory.
   *
   * @param aSourceDir The original directory name. May not be <code>null</code>.
   * @param aTargetDir The destination directory name. May not be <code>null</code>.
   * @return A non-<code>null</code> error code.
   */
  @Nonnull
  public static FileIOError renameDir(
      @Nonnull final File aSourceDir, @Nonnull final File aTargetDir) {
    ValueEnforcer.notNull(aSourceDir, "SourceDirectory");
    ValueEnforcer.notNull(aTargetDir, "TargetDirectory");

    // Does the source directory exist?
    if (!FileUtils.existsDir(aSourceDir))
      return EFileIOErrorCode.SOURCE_DOES_NOT_EXIST.getAsIOError(
          EFileIOOperation.RENAME_DIR, aSourceDir);

    // Are source and target different?
    if (EqualsUtils.equals(aSourceDir, aTargetDir))
      return EFileIOErrorCode.SOURCE_EQUALS_TARGET.getAsIOError(
          EFileIOOperation.RENAME_DIR, aSourceDir);

    // Does the target directory already exist?
    if (aTargetDir.exists())
      return EFileIOErrorCode.TARGET_ALREADY_EXISTS.getAsIOError(
          EFileIOOperation.RENAME_DIR, aTargetDir);

    // Is the source a parent of target?
    if (FileUtils.isParentDirectory(aSourceDir, aTargetDir))
      return EFileIOErrorCode.TARGET_IS_CHILD_OF_SOURCE.getAsIOError(
          EFileIOOperation.RENAME_DIR, aSourceDir, aTargetDir);

    // Is the source parent directory writable?
    final File aSourceParentDir = aSourceDir.getParentFile();
    if (aSourceParentDir != null && !FileUtils.canWrite(aSourceParentDir))
      return EFileIOErrorCode.SOURCE_PARENT_NOT_WRITABLE.getAsIOError(
          EFileIOOperation.RENAME_DIR, aSourceDir);

    // Is the target parent directory writable?
    final File aTargetParentDir = aTargetDir.getParentFile();
    if (aTargetParentDir != null
        && aTargetParentDir.exists()
        && !FileUtils.canWrite(aTargetParentDir))
      return EFileIOErrorCode.TARGET_PARENT_NOT_WRITABLE.getAsIOError(
          EFileIOOperation.RENAME_DIR, aTargetDir);

    // Ensure parent of target directory is present
    FileUtils.ensureParentDirectoryIsPresent(aTargetDir);

    try {
      final EFileIOErrorCode eError =
          aSourceDir.renameTo(aTargetDir)
              ? EFileIOErrorCode.NO_ERROR
              : EFileIOErrorCode.OPERATION_FAILED;
      return eError.getAsIOError(EFileIOOperation.RENAME_DIR, aSourceDir, aTargetDir);
    } catch (final SecurityException ex) {
      return EFileIOErrorCode.getAsIOError(EFileIOOperation.RENAME_DIR, ex);
    }
  }
Exemplo n.º 4
0
  /**
   * Copies the source file to the target file.
   *
   * @param aSourceFile The source file to use. May not be <code>null</code>. Needs to be an
   *     existing file.
   * @param aTargetFile The destination files. May not be <code>null</code> and may not be an
   *     existing file.
   * @return A non-<code>null</code> error code.
   */
  @Nonnull
  public static FileIOError copyFile(
      @Nonnull final File aSourceFile, @Nonnull final File aTargetFile) {
    ValueEnforcer.notNull(aSourceFile, "SourceFile");
    ValueEnforcer.notNull(aTargetFile, "TargetFile");

    // Does the source file exist?
    if (!FileUtils.existsFile(aSourceFile))
      return EFileIOErrorCode.SOURCE_DOES_NOT_EXIST.getAsIOError(
          EFileIOOperation.COPY_FILE, aSourceFile);

    // Are source and target different?
    if (EqualsUtils.equals(aSourceFile, aTargetFile))
      return EFileIOErrorCode.SOURCE_EQUALS_TARGET.getAsIOError(
          EFileIOOperation.COPY_FILE, aSourceFile);

    // Does the target file already exist?
    if (aTargetFile.exists())
      return EFileIOErrorCode.TARGET_ALREADY_EXISTS.getAsIOError(
          EFileIOOperation.COPY_FILE, aTargetFile);

    // Is the source file readable?
    if (!FileUtils.canRead(aSourceFile))
      return EFileIOErrorCode.SOURCE_NOT_READABLE.getAsIOError(
          EFileIOOperation.COPY_FILE, aSourceFile);

    // Is the target parent directory writable?
    final File aTargetParentDir = aTargetFile.getParentFile();
    if (aTargetParentDir != null
        && aTargetParentDir.exists()
        && !FileUtils.canWrite(aTargetParentDir))
      return EFileIOErrorCode.TARGET_PARENT_NOT_WRITABLE.getAsIOError(
          EFileIOOperation.COPY_FILE, aTargetFile);

    // Ensure the targets parent directory is present
    FileUtils.ensureParentDirectoryIsPresent(aTargetFile);

    // Used FileChannel for better performance
    final EFileIOErrorCode eError =
        _copyFile(aSourceFile, aTargetFile).isSuccess()
            ? EFileIOErrorCode.NO_ERROR
            : EFileIOErrorCode.OPERATION_FAILED;
    return eError.getAsIOError(EFileIOOperation.COPY_FILE, aSourceFile, aTargetFile);
  }
Exemplo n.º 5
0
  /**
   * Create a new directory. The direct parent directory already needs to exist.
   *
   * @param aDir The directory to be created. May not be <code>null</code>.
   * @return A non-<code>null</code> error code.
   */
  @Nonnull
  public static FileIOError createDir(@Nonnull final File aDir) {
    ValueEnforcer.notNull(aDir, "Directory");

    // Does the directory already exist?
    if (aDir.exists())
      return EFileIOErrorCode.TARGET_ALREADY_EXISTS.getAsIOError(EFileIOOperation.CREATE_DIR, aDir);

    // Is the parent directory writable?
    final File aParentDir = aDir.getParentFile();
    if (aParentDir != null && aParentDir.exists() && !FileUtils.canWrite(aParentDir))
      return EFileIOErrorCode.SOURCE_PARENT_NOT_WRITABLE.getAsIOError(
          EFileIOOperation.CREATE_DIR, aDir);

    try {
      final EFileIOErrorCode eError =
          aDir.mkdir() ? EFileIOErrorCode.NO_ERROR : EFileIOErrorCode.OPERATION_FAILED;
      return eError.getAsIOError(EFileIOOperation.CREATE_DIR, aDir);
    } catch (final SecurityException ex) {
      return EFileIOErrorCode.getAsIOError(EFileIOOperation.CREATE_DIR, ex);
    }
  }