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

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

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

10 ответов


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

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

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

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

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


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

Э. Г.

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

посмотреть файлы документация для более подробной информации


для перемещения файла вы также можете использовать Jakarta Commons IOs пакета fileutils.moveFile

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


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


просто добавьте пути к исходной и целевой папкам.

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

    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");
    }

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

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

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


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

  boolean success = file.renameTo(new File(Destdir, file.getName()));

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 flag = true;

    try {

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

    } catch (Exception e) {

        flag = false;
        e.printStackTrace();
    }

    return flag;
}

Files.move(source, target, REPLACE_EXISTING);

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

подробнее о файлы


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

// 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;
    }       
}