it-roy-ru.com

Переименовать файл с помощью Java

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

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

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

148
Shekhar

Скопировано с 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*/);
156
Pierre

Короче:

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);
76
kr37

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

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

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

27
Thomas Owens

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

Пример:

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

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

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

24
Zoltán

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

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

  try {
    FileUtils.moveFile(oldFile, newFile);
  } catch (IOException e) {
    e.printStackTrace();
  }
17
Branflake2267

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

        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");
        }
12
senior
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
Kirill Ch

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

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

3
Dan Vinton

Попробуй это

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

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

3
anoopknr

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

О переименовании файла в Java см. документацию для метода renameTo() в классе File.

2
Yuval

Да, вы можете использовать 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));
           }
        });

    }
}

}

1
V1ma-8

Вот мой код для успешного переименования нескольких файлов в папке:

public static void renameAllFilesInFolder(String folderPath, String newName, String extension) {
    if(newName == null || newName.equals("")) {
        System.out.println("New name cannot be null or empty");
        return;
    }
    if(extension == null || extension.equals("")) {
        System.out.println("Extension cannot be null or empty");
        return;
    }

    File dir = new File(folderPath);

    int i = 1;
    if (dir.isDirectory()) { // make sure it's a directory
        for (final File f : dir.listFiles()) {
            try {
                File newfile = new File(folderPath + "\\" + newName + "_" + i + "." + extension);

                if(f.renameTo(newfile)){
                    System.out.println("Rename succesful: " + newName + "_" + i + "." + extension);
                } else {
                    System.out.println("Rename failed");
                }
                i++;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

}

и запустим его для примера:

renameAllFilesInFolder("E:\\Downloads\\Foldername", "my_avatar", "gif");
1
Tạ Anh Tú
Files.move(file.toPath(), fileNew.toPath()); 

работает, но только когда вы закрываете (или автоматически закрываете) ВСЕ используемые ресурсы (InputStream, FileOutputStream и т. д.) Я думаю, что та же ситуация с file.renameTo или FileUtils.moveFile.

0