Đổi tên file trong Java

Java 6 trở về trước cung cấp cho chúng ta phương thức renameTo() để đổi tên một file. Tuy nhiên, việc sử dụng phương thức này còn gặp nhiều hạn chế vì nó phụ thuộc vào nền tảng. Bạn có thể dùng phương thức này đổi tên file thành công trên *nix (linux,…) nhưng lại bị lỗi trên Windows. Mặc dù vậy, tôi vẫn giới thiệu để bạn biết xem như nắm một tý về lịch sử của Java. Phương thức renameTo() trả về true khi đổi tên file thành công, ngược lại trả về false khi đổi tên file thất bại.

Ví dụ đổi tên file dùng renameTo()

package com.ngockhuong.file;

import java.io.File;

public class RenameFileExample {
    public static void main(String[] args) {
	File oldFile = new File("oldfile.txt");
	File newFile = new File("newfile.txt");

	if (oldFile.renameTo(newFile)) {
		System.out.println("Đổi tên thành công!");
	} else {
		System.out.println("Đổi tên bị lỗi!");
	}
    }
}

Do những hạn chế còn tồn đọng từ phương thức renameTo() của Java, rất nhiều thư viện từ cộng đồng được viết ra để thay thế cho phương thức còn nhiều hạn chế kia. Nổi bật như thư viện Commons IO của Apache cung cấp các class cho phép thao tác với file, tên file,… (Bạn có thể tìm hiểu thêm nếu muốn).

Sự ra đời của java.nio.file.Files

Từ Java 7 trở đi, một class mới java.nio.file.Files được giới thiệu. Một lựa chọn đáng tin cậy và linh hoạt hơn so với java.io.File. Chắc có lẽ Oracle đã thấy java.io.File đã quá già cõi so với thời đại.

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;

/** 
 * How to rename a file in Java 8 and above.
 * @author ngockhuong
 */
public class RenameFile {
    public static void main(String[] args) {
        
        Path f = Paths.get("c:/temp/oldfile.txt");
        Path rF = Paths.get("c:/temp/newfile.txt");
        try {
            Files.move(f, rF, StandardCopyOption.REPLACE_EXISTING);
            System.out.println("File đã được đổi tên thành công");
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("Lỗi: Không thể đổi tên file");
        }       
    }
}

Phương thức move(Path source, Path target, CopyOption... options) ở đây có thể sử dụng để đổi tên file lẫn di chuyển file bạn nhé. Và từ bây giờ, nếu đã sử dụng Java 7 hoặc cao hơn thì bạn cứ việc dùng phương thức move() này của lớp Files, không cần phải sử dụng thư viện ngoài đâu.

Tham khảo

  1. File renameTo() documentation
  2. Files move() documentation

0 0 votes
Đánh giá bài viết
Nhận thông báo
Thông báo khi có
guest

0 Bình luận
Phản hồi nội tuyến
Xem tất cả các bình luận