자바에서는 디렉터리나 파일을 다룰 수 있도록 java.io.File 클래스를 제공하고 있다. File 클래스에서 제공하는 renameTo( ) 메소드는 디렉터리, 파일의 이름을 변경할 수 있다. 

 

 

 주요 메서드

public boolean renameTo(File dest)

 

 renameTo 메소드는 변경하고자 하는 파일에 대한 참조를 가진 File 객체를 파라미터로 받아 이름 변경 성공 여부를 리턴한다. 이름 변경에 성공했을 경우 true, 실패했을 경우 false를 리턴하는데 실패한 이유까지는 제공하지 않는다. 주로 변경하고자 하는 디렉터리(혹은 파일)이 같은 경로에 있을 경우 혹은 변경하려고 하는 디렉터리가 다른 프로세스에 의해서 참조되고 있을 경우 false를 반환한다. 모든 상황에 대해서 false를 반환하기 때문에 제어문을 통해서 먼저 검증을 하고 renameTo 메서드를 호출하는 것이 좋다.

 

 또한 변경하려고 하는 파일, File 객체에 의해서 참조되고 있는 파일이 존재하지 않을 경우에 FileNotFoundException을 발생시킨다. 굉장히 간단하게 쓸 수 있는 메서드지만 실패했을 경우 그 상세 이유를 알 수 없기 때문에 예외 처리에 있어서 조금 까다로울 수 있다.

 

public String getParent()

 

 객체가 가리키는 파일의 상위 디렉터리 Path를 String 형태로 반환한다. 

 

public String getName()

 

 객체가 가리키는 파일을 경로없이 이름만 반환한다.

 

 


 

 

디렉터리 이름 변경

example) "C:\Users\guest\Pictures\images" → "C:\Users\USER\Pictures\icon" 으로 변경

public class Example {
	public static void main (String args[]) {
		File file = new File("C:\\Users\\USER\\Pictures\\images");
		File newFile = new File(file.getParent() + "\\" + "icons");
		if(file.renameTo(newFile))
			System.out.println("성공");
		else
			System.out.println("실패");
	}
}

 

 "사진" 디렉터리에 있는 images 디렉터리의 이름을 icons으로 변경하는 예제다. images 디렉터리의 경로를 File의 생성자 파라미터로 가지는 File 객체를 생성하고 마찬가지로 변경하고자하는 디렉터리의 경로를 File 객체를 생성한다. 이 경우 같은 위치에서 디렉터리 이름만 바뀌는 것이기 때문에 기존 파일 객체에서 getParent() 메서드를 통해 상위 경로를 문자열 객체로 얻어올 수 있다. 

 

 이름을 변경하고자 하는 객체에서 renameTo(File) 메서드를 호출한 뒤 파라미터로 바꾸고자 하는 파일 객체를 전달하면 이름을 변경할 수 있다.

 

 

 

파일 이름 변경

 디렉터리가 아닌 파일의 이름을 변경하고자 할 때 같은 메소드를 사용하지만 확장자를 고려해야 한다. 이미지 파일인 경우 JPG, PNG 등이 있고 동영상 파일의 경우 AVI, MP4 등의 확장자가 붙는데 파일의 확장자를 고려하지 않고 파일의 이름을 변경하면 파일 탐색기 상에서 파일 형식이 "파일"로 표시되어 어떤 파일인지 알아볼 수 없게 되기 때문에 파일 이름을 변경한다면 반드시 확장자를 고려해야 한다.

 

 

 

example) "C:\Users\guest\Pictures\images"에 있는 icon1.jpg 파일을 icon2.jpg로 변경

public class Example {
	public static void main (String args[]) {
		File file = new File("C:\\Users\\USER\\Pictures\\images\\icon1.jpg");
		String fileName = file.getName();
		int idx = fileName.lastIndexOf(".");
		String ext = fileName.substring(idx + 1);
		String newFilePath = file.getParent() + "\\" + "icon2." + ext;
		File newFile = new File(newFilePath);

		if(file.renameTo(newFile))
			System.out.println("성공");
		else
			System.out.println("실패");
	}
}

 

 File 클래스에서 getName() 메소드를 호출하면 해당 객체가 가진 파일 경로에서 파일 이름(icon1.jpg)만을 얻을 수 있다. 이렇게 얻은 파일 이름의 끝에서부터 "."을 찾아 해당 위치를 저장하고 해당 위치의 다음에 오는 문자열을 저장하는 것으로 확장자를 얻을 수 있다. 그 후 getParent()로 상위 경로를 얻고 바꿀 파일 이름과 추출한 확장자를 연결하는 것으로 파일 이름 변경을 할 수 있다.

+ Recent posts