logback-android/src/main/java/ch/qos/logback/core/rolling/helper/RenameUtil.java
public void rename(String src, String target) throws RolloverFailure {
    if (src.equals(target)) {
      addWarn("Source and target files are the same [" + src + "]. Skipping.");
      return;
    }
    File srcFile = new File(src);

    if (srcFile.exists()) {
      File targetFile = new File(target);
      createMissingTargetDirsIfNecessary(targetFile);

      addInfo("Renaming file [" + srcFile + "] to [" + targetFile + "]");

      boolean result = srcFile.renameTo(targetFile);

      if (!result) {
        addWarn("Failed to rename file [" + srcFile + "] as [" + targetFile + "].");

        Boolean areOnDifferentVolumes = areOnDifferentVolumes(srcFile, targetFile);
        if (Boolean.TRUE.equals(areOnDifferentVolumes)) {
          addWarn("Detected different file systems for source [" + src + "] and target [" + target + "]. Attempting rename by copying.");
          renameByCopying(src, target);
          return;
        } else {
          addWarn("Please consider leaving the [file] option of " + RollingFileAppender.class.getSimpleName() + " empty.");
          addWarn("See also " + RENAMING_ERROR_URL);
        }
      }
    } else {
      throw new RolloverFailure("File [" + src + "] does not exist.");
    }
  }
public void rename(String src, String target) throws RolloverFailure {
    if (src.equals(target)) {
      addWarn("Source and target files are the same [" + src + "]. Skipping.");
      return;
    }
    File srcFile = new File(src);

    if (srcFile.exists()) {
      File targetFile = new File(target);
      createMissingTargetDirsIfNecessary(targetFile);

      addInfo("Renaming file [" + srcFile + "] to [" + targetFile + "]");

      boolean result = srcFile.renameTo(targetFile);

      if (!result) {
        addWarn("Failed to rename file [" + srcFile + "] as [" + targetFile + "].");

        Boolean areOnDifferentVolumes = areOnDifferentVolumes(srcFile, targetFile);
        if (Boolean.TRUE.equals(areOnDifferentVolumes)) {
          addWarn("Detected different file systems for source [" + src + "] and target [" + target + "]. Attempting rename by copying.");
          renameByCopying(src, target);
          return;
        } else {
          addWarn("Please consider leaving the [file] option of " + RollingFileAppender.class.getSimpleName() + " empty.");
          addWarn("See also " + RENAMING_ERROR_URL);
        }
      }
    } else {
      throw new RolloverFailure("File [" + src + "] does not exist.");
    }
  }
public void rename ( String src , String target ) throws RolloverFailure { if ( src . equals ( target ) ) { addWarn ( "Source and target files are the same [" + src + "]. Skipping." ) ; return ; } File srcFile = new File ( src ) ; if ( srcFile . exists ( ) ) { File targetFile = new File ( target ) ; createMissingTargetDirsIfNecessary ( targetFile ) ; addInfo ( "Renaming file [" + srcFile + "] to [" + targetFile + "]" ) ; boolean result = srcFile . renameTo ( targetFile ) ; if ( ! result ) { addWarn ( "Failed to rename file [" + srcFile + "] as [" + targetFile + "]." ) ; Boolean areOnDifferentVolumes = areOnDifferentVolumes ( srcFile , targetFile ) ; if ( Boolean . TRUE . equals ( areOnDifferentVolumes ) ) { addWarn ( "Detected different file systems for source [" + src + "] and target [" + target + "]. Attempting rename by copying." ) ; renameByCopying ( src , target ) ; return ; } else { addWarn ( "Please consider leaving the [file] option of " + RollingFileAppender . class . getSimpleName ( ) + " empty." ) ; addWarn ( "See also " + RENAMING_ERROR_URL ) ; } } } else { throw new RolloverFailure ( "File [" + src + "] does not exist." ) ; } }
A relatively robust file renaming method which in case of failure due to
src and target being on different volumes, falls back onto
renaming by copying.

@param src
@param target
@throws RolloverFailure
A relatively robust file renaming method which in case of failure due to src and target being on different volumes falls back onto renaming by copying .