it-roy-ru.com

Как переместить файл из одного места в другое в Java?

Как вы перемещаете файл из одного места в другое? Когда я запускаю свою программу, любой файл, созданный в этом месте, автоматически перемещается в указанное место. Как узнать, какой файл перемещен?

Заранее спасибо!

70
pmad
myFile.renameTo(new File("/the/new/place/newName.file"));

Файл # renameTo делает это (он может не только переименовывать, но и перемещаться между каталогами, по крайней мере, в одной файловой системе).

Переименовывает файл, обозначенный этим абстрактным путем.

Многие аспекты поведения этого метода по своей природе зависят от платформы: операция переименования может быть не в состоянии переместить файл из одной файловой системы в другую, она может быть не атомарной, и может не получиться, если файл с целевым абстрактным путем уже существует. Возвращаемое значение всегда следует проверять, чтобы убедиться, что операция переименования прошла успешно. 

Если вам нужно более комплексное решение (например, перемещение файла между дисками), посмотрите на Apache Commons FileUtils # moveFile

99
Thilo

С Java 7 или новее вы можете использовать Files.move(from, to, CopyOption... options).

Например.

Files.move(Paths.get("/foo.txt"), Paths.get("bar.txt"), StandardCopyOption.REPLACE_EXISTING);

Смотрите Файлы Документация для более подробной информации.

55
micha

Чтобы переместить файл, вы также можете использовать Jakarta Commons IOs FileUtils.moveFile

При ошибке он генерирует переменную IOException, поэтому, когда исключение не выдается, вы знаете, что файл был перемещен.

5
DerMike

Просто добавьте путь к папке источника и назначения.

Все файлы и папки будут перемещены из исходной папки в папку назначения

    File destinationFolder = new File("");
    File sourceFolder = new File("");

    if (!destinationFolder.exists())
    {
        destinationFolder.mkdirs();
    }

    // Check weather source exists and it is folder.
    if (sourceFolder.exists() && sourceFolder.isDirectory())
    {
        // Get list of the files and iterate over them
        File[] listOfFiles = sourceFolder.listFiles();

        if (listOfFiles != null)
        {
            for (File child : listOfFiles )
            {
                // Move files to destination folder
                child.renameTo(new File(destinationFolder + "\\" + child.getName()));
            }

            // Add if you want to delete the source folder 
            sourceFolder.delete();
        }
    }
    else
    {
        System.out.println(sourceFolder + "  Folder does not exists");
    }
4
manjeet lama

File.renameTo из Java IO можно использовать для перемещения файла в Java. Также см. этот SO вопрос .

4
Piotr

Java 6

public boolean moveFile(String sourcePath, String targetPath) {

    File fileToMove = new File(sourcePath);

    return fileToMove.renameTo(new File(targetPath));
}

Java 7 (с помощью NIO)

public boolean moveFile(String sourcePath, String targetPath) {

    boolean fileMoved = true;

    try {

        Files.move(Paths.get(sourcePath), Paths.get(targetPath), StandardCopyOption.REPLACE_EXISTING);

    } catch (Exception e) {

        fileMoved = false;
        e.printStackTrace();
    }

    return fileMoved;
}
2
Pranav V R

Вы можете выполнить внешний инструмент для этой задачи (например, copy в средах Windows), но для сохранения переносимости кода общий подход заключается в следующем:

  1. прочитать исходный файл в память
  2. записать содержимое в файл в новом месте
  3. удалить исходный файл

File#renameTo будет работать до тех пор, пока исходное и целевое местоположение находятся на одном и том же томе. Лично я бы не использовал его для перемещения файлов в разные папки.

2
Andreas_D

Попробуй это :-

  boolean success = file.renameTo(new File(Destdir, file.getName()));
2
Vijay Gupta
Files.move(source, target, REPLACE_EXISTING);

Вы можете использовать объект Files

Узнайте больше о Файлы

1
Daniel Taub

Написал этот метод, чтобы сделать эту самую вещь в моем собственном проекте только с файлом замены, если в нем есть логика.

// we use the older file i/o operations for this rather than the newer jdk7+ Files.move() operation
private boolean moveFileToDirectory(File sourceFile, String targetPath) {
    File tDir = new File(targetPath);
    if (tDir.exists()) {
        String newFilePath = targetPath+File.separator+sourceFile.getName();
        File movedFile = new File(newFilePath);
        if (movedFile.exists())
            movedFile.delete();
        return sourceFile.renameTo(new File(newFilePath));
    } else {
        LOG.warn("unable to move file "+sourceFile.getName()+" to directory "+targetPath+" -> target directory does not exist");
        return false;
    }       
}
0
Joel M