Java를 사용하여 파일 이름 바꾸기


174

우리는 파일 말의 이름을 바꿀 수 있습니다 test.txt에를 test1.txt?

경우 test1.txt는 이름을 바꿀 것입니다 존재?

기존의 test1.txt 파일로 이름을 바꾸어 나중에 사용할 수 있도록 test.txt의 새 내용을 추가하려면 어떻게해야합니까?


6
마지막 단락은 이름 바꾸기 작업을 전혀 설명하지 않습니다. 추가 작업에 대해 설명합니다.
Lorne의 후작

답변:


173

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*/);

24
이 코드는 모든 경우 또는 플랫폼에서 작동하지 않습니다. : 방법 이름 바꾸기는 신뢰할 수 없습니다 stackoverflow.com/questions/1000183/...
스테판 Grenier의

오직 Path나를 위해 일하는 길만이 renameTo항상 거짓을 돌려줍니다. kr37의 답변 또는
andras

107

한마디로 :

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

1
Path는 WindowsPath, ZipPath 및 AbstractPath 만 구현하는 인터페이스입니다. 이것이 다중 플랫폼 구현에 문제가됩니까?
Caelum

1
안녕하세요 @ user2104648, 여기 ( tutorials.jenkov.com/java-nio/path.html )는 Linux 환경에서 파일을 처리하는 방법에 대한 예입니다. 기본적으로, 당신 대신 당신이 언급 한 구현 중 하나를 사용하여의 java.nio.file.Paths.get (somepath는)를 사용합니다
maxivis

2
Path source = ...는 무엇입니까?
Koray Tugay

@ kr37 완벽한 답변!
gaurav

30

File 객체 에서 renameTo 메서드 를 사용하려고 합니다.

먼저 대상을 나타내는 File 객체를 만듭니다. 해당 파일이 있는지 확인하십시오. 존재하지 않는 경우 파일을 이동할 새 File 객체를 만듭니다. 이동할 파일에서 renameTo 메소드를 호출하고 renameTo에서 리턴 된 값을 확인하여 호출이 성공했는지 확인하십시오.

한 파일의 내용을 다른 파일에 추가하려면 사용 가능한 여러 작성자가 있습니다. 확장명을 기반으로 일반 텍스트처럼 들리므로 FileWriter를 살펴 보겠습니다 .


9
잘 모르겠지만 피에르가 소스 코드없이 게시 한 것과 똑같습니다.
Thomas Owens

28

Java 1.6 이하의 경우, 가장 안전하고 깨끗한 API는 Guava의 Files.move 입니다.

예:

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

첫 번째 줄은 새 파일의 위치가 동일한 디렉토리, 즉 이전 파일 의 상위 디렉토리인지 확인 합니다.

편집 : 나는 매우 유사한 접근 방식을 도입 한 Java 7을 사용하기 전에 이것을 썼습니다. 따라서 Java 7 이상을 사용하는 경우 kr37의 답변을보고 투표해야합니다.


18

파일을 새 이름으로 이동하여 이름을 바꿉니다. (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

파일 이름을 바꾸는 쉬운 방법입니다.

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

5
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);

5

이 시도

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

참고 : 우리는 항상 renameTo 반환 값을 확인하여 플랫폼에 따라 다르기 때문에 (다른 운영 체제, 다른 파일 시스템) 이름 바꾸기 파일이 성공적인지 확인해야합니다. 이름 바꾸기가 실패하면 IO 예외가 발생하지 않습니다.


이것은 9 년 전에 Pierre가받은 대답과 어떻게 다릅니 까?
마초

4

예, 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));
           }
        });

    }
}

}



2

내가 아는 한 파일 이름을 바꾸면 내용이 대상 이름으로 기존 파일의 내용에 추가되지 않습니다.

Java에서 파일 이름을 바꾸는 방법에 대해서는 class 의 메소드 문서 를 참조하십시오 .renameTo()File


1
Files.move(file.toPath(), fileNew.toPath()); 

작품,하지만 당신은 가까운 (또는 자동 종료) ALL 사용되는 리소스 (시 InputStream, FileOutputStream등) 나는과 같은 상황을 생각 file.renameTo하거나 FileUtils.moveFile.


1

다음은 폴더의 여러 파일 이름을 성공적으로 바꾸는 코드입니다.

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

-2

실행 코드가 여기 있습니다.

private static void renameFile(File fileName) {

    FileOutputStream fileOutputStream =null;

    BufferedReader br = null;
    FileReader fr = null;

    String newFileName = "yourNewFileName"

    try {
        fileOutputStream = new FileOutputStream(newFileName);

        fr = new FileReader(fileName);
        br = new BufferedReader(fr);

        String sCurrentLine;

        while ((sCurrentLine = br.readLine()) != null) {
            fileOutputStream.write(("\n"+sCurrentLine).getBytes());
        }

        fileOutputStream.flush();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            fileOutputStream.close();
            if (br != null)
                br.close();

            if (fr != null)
                fr.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}

2
일반적으로 익명 코드 행을 게시하는 대신 솔루션을 설명하는 것이 좋습니다. 당신이 읽을 수있는 내가 좋은 답변 쓰기 어떻게 도하고, 전체 코드 기반의 답변을 설명하면서
안 팜에게

복사와 이름 바꾸기는 일반적으로 다른 작업이므로 사본임을 분명히 표시해야한다고 생각합니다. 또한 바이트가 아닌 문자를 복사 할 때 불필요한 느리게 발생합니다.
Joel Klinghed 17
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.