Переименовать файл, используя Java - PullRequest
150 голосов
/ 21 июля 2009

Можем ли мы переименовать файл, скажем test.txt в test1.txt?

Если test1.txt существует, будет ли оно переименовано?

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

Ответы [ 14 ]

160 голосов
/ 21 июля 2009

Скопировано с http://exampledepot.8waytrips.com/egs/java.io/RenameFile.html

// File (or directory) with old name
File file = new File("oldname");

// File (or directory) with new name
File file2 = new File("newname");

if (file2.exists())
   throw new java.io.IOException("file exists");

// Rename file (or directory)
boolean success = file.renameTo(file2);

if (!success) {
   // File was not successfully renamed
}

Чтобы добавить в новый файл:

java.io.FileWriter out= new java.io.FileWriter(file2, true /*append=yes*/);
83 голосов
/ 28 ноября 2013

Короче говоря:

Files.move(source, source.resolveSibling("newname"));

Подробнее:

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

Следующее скопировано непосредственно из http://docs.oracle.com/javase/7/docs/api/index.html:

Предположим, мы хотим переименовать файл в "newname", сохраняя файл в том же каталоге:

Path source = Paths.get("path/here");
Files.move(source, source.resolveSibling("newname"));

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

Path source = Paths.get("from/path");
Path newdir = Paths.get("to/path");
Files.move(source, newdir.resolve(source.getFileName()), REPLACE_EXISTING);
27 голосов
/ 21 июля 2009

Вы хотите использовать метод renameTo для File объекта.

Сначала создайте объект File для представления пункта назначения. Проверьте, существует ли этот файл. Если он не существует, создайте новый объект File для перемещаемого файла. вызовите метод renameTo для файла, который нужно переместить, и проверьте возвращенное значение из renameTo, чтобы увидеть, был ли вызов успешным.

Если вы хотите добавить содержимое одного файла в другой, доступно несколько авторов. Исходя из расширения, это звучит как обычный текст, поэтому я бы посмотрел на FileWriter .

24 голосов
/ 26 июля 2013

Для Java 1.6 и ниже, я считаю, что самый безопасный и чистый API для этого - Files.move .

от Guava.

Пример:

File newFile = new File(oldFile.getParent(), "new-file-name.txt");
Files.move(oldFile.toPath(), newFile.toPath());

Первая строка проверяет, что местоположение нового файла совпадает с каталогом, то есть родительский каталог старого файла.

EDIT: Я написал это до того, как начал использовать Java 7, который представил очень похожий подход. Поэтому, если вы используете Java 7+, вы должны увидеть и подтвердить ответ kr37.

18 голосов
/ 17 марта 2013

Переименование файла путем перемещения его на новое имя. (FileUtils из библиотеки Apache Commons IO lib)

  String newFilePath = oldFile.getAbsolutePath().replace(oldFile.getName(), "") + newName;
  File newFile = new File(newFilePath);

  try {
    FileUtils.moveFile(oldFile, newFile);
  } catch (IOException e) {
    e.printStackTrace();
  }
13 голосов
/ 04 марта 2015

Это простой способ переименовать файл:

        File oldfile =new File("test.txt");
        File newfile =new File("test1.txt");

        if(oldfile.renameTo(newfile)){
            System.out.println("File renamed");
        }else{
            System.out.println("Sorry! the file can't be renamed");
        }
3 голосов
/ 25 марта 2018

Попробуйте

File file=new File("Your File");
boolean renameResult = file.renameTo(new File("New Name"));
// todo: check renameResult

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

3 голосов
/ 24 марта 2017
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import static java.nio.file.StandardCopyOption.*;

Path yourFile = Paths.get("path_to_your_file\text.txt");

Files.move(yourFile, yourFile.resolveSibling("text1.txt"));

Чтобы заменить существующий файл с именем "text1.txt":

Files.move(yourFile, yourFile.resolveSibling("text1.txt"),REPLACE_EXISTING);
3 голосов
/ 21 июля 2009

Если это просто переименование файла, вы можете использовать File.renameTo () .

Если вы хотите добавить содержимое второго файла к первому, посмотрите на FileOutputStream с опцией конструктора добавления или То же самое для FileWriter . Вам нужно будет прочитать содержимое файла, чтобы добавить и записать его, используя поток вывода / записи.

2 голосов
/ 27 декабря 2018

Да, вы можете использовать File.renameTo (). Но не забудьте указать правильный путь при переименовании его в новый файл.

import java.util.Arrays;
import java.util.List;

public class FileRenameUtility {
public static void main(String[] a) {
    System.out.println("FileRenameUtility");
    FileRenameUtility renameUtility = new FileRenameUtility();
    renameUtility.fileRename("c:/Temp");
}

private void fileRename(String folder){
    File file = new File(folder);
    System.out.println("Reading this "+file.toString());
    if(file.isDirectory()){
        File[] files = file.listFiles();
        List<File> filelist = Arrays.asList(files);
        filelist.forEach(f->{
           if(!f.isDirectory() && f.getName().startsWith("Old")){
               System.out.println(f.getAbsolutePath());
               String newName = f.getAbsolutePath().replace("Old","New");
               boolean isRenamed = f.renameTo(new File(newName));
               if(isRenamed)
                   System.out.println(String.format("Renamed this file %s to  %s",f.getName(),newName));
               else
                   System.out.println(String.format("%s file is not renamed to %s",f.getName(),newName));
           }
        });

    }
}

}

...