자바 file.renameTo false 의 원인 및 해결 방안 되 돌려 주기

java file.rename 잘못된 이 유 를 되 돌려 주 려 면
폴 더 에 있 는 파일 의 이름 을 바 꿔 야 합 니 다.false 로 돌아 간 것 을 발 견 했 습 니 다.먼저 main 방법 으로 테스트 한 결과 문제 가 없 음 을 발 견 했 습 니 다.다음 과 같 습 니 다.

public static void main(String[] args) throws IOException {
        File file1 = new File("D:\\aabb.xml");
        File file2 = new File("D:\\ccdd.xml");
        boolean b = file1.renameTo(file2);
        System.out.println(b); // true
    }
마지막 으로 한 파일 이 파일 로 스 트림 되 어 있 는 것 을 발 견 했 습 니 다.스 트림 은 close 를 사용 하지 않 아 파일 이름 을 바 꾸 는 데 실 패 했 습 니 다.다음 과 같이 시 뮬 레이 션 합 니 다.

public static void main(String[] args) throws IOException {
        File file1 = new File("D:\\aabb.xml");
        FileWriter out = new FileWriter(file1);
        File file2 = new File("D:\\ccdd.xml");
        boolean b = file1.renameTo(file2);
        System.out.println(b);// false
    }
최종 적 으로 도 잘 해결 되 고 있 습 니 다.
적당 한 곳 을 찾 아서 닫 았 으 면 좋 겠 어 요.

public static void main(String[] args) throws IOException {
        File file1 = new File("D:\\aabb.xml");
        FileWriter out = new FileWriter(file1);
        out.close();
        File file2 = new File("D:\\ccdd.xml");
        boolean b = file1.renameTo(file2);
        System.out.println(b);//true
    }
자바 File.renameTo 방법,주의해 야 할 구덩이
최근 오래된 프로젝트 를 인수 할 때 File.renameTo(File file)방법 을 만 나 특성 을 잘 모 르 기 때문에 다음 소스 코드 를 연구 한 결과 바 텀 호출 은 Native 방법 으로 이 루어 진 것 으로 나 타 났 다.
그 자체 가 용법 에 대한 곤 혹 스 러 움 을 가지 고 테스트 사례 를 써 서 베일 을 벗 기 고 사용 할 때 주의해 야 할 두 가 지 를 발견 했다.
테스트 용례 코드 는 다음 과 같다.

import java.io.File;
import java.io.IOException; 
public class TestRenameTo {
  public static void main(String[] args) {
    File file = new File("f:\\1.txt");
    if (!file.isFile()) {
      try {
        file.createNewFile();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  //  renameTo() 
    System.out.println(file.exists());
    file.renameTo(new File("f:\\2.txt"));
  //  renameTo() 
    System.out.println(file.exists());
  }
}
첫 번 째 실행 프로그램,디 렉 터 리 아래 1.txt 와 2.txt 가 존재 하지 않 습 니 다.
얻 은 결 과 는 다음 과 같다.


renameTo 호출 전후 1.txt 가 먼저 존재 한 다음 사라 지고 마지막 폴 더 에 2.txt 가 생 성 되 었 음 을 알 수 있 습 니 다.
두 번 째 결 과 를 편리 하 게 비교 하기 위해 2.txt 에 내용 을 쓰 고"hello world!"(나 를 용서 하 는 중 2^-^)

두 번 째 실행 프로그램,디 렉 터 리 에 2.txt 가 존재 합 니 다.결 과 는 다음 과 같 습 니 다.



2.txt 의 내용 이 바 뀌 지 않 았 습 니 다.이번 이름 변경 이 성공 하지 못 했 음 을 증명 합 니 다.
요약:
  • 이름 이 바 뀐 파일 이 존재 한다 면 renameTo()는 성공 하지 못 합 니 다
  • renameTo()가 성공 하면 원본 파일 이 삭 제 됩 니 다
  • 이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.

    좋은 웹페이지 즐겨찾기