Java - Ubah nama atau Pindahkan File

1. Ikhtisar

Dalam tutorial singkat ini, kita akan melihat mengganti nama / memindahkan File di Java.

Pertama-tama kita akan melihat penggunaan kelas Files and Path dari NIO, lalu kelas Java File , Google Guava, dan terakhir library Apache Commons IO.

Artikel ini adalah bagian dari seri “ Java - Kembali ke Dasar ” di Baeldung.

2. Penyiapan

Dalam contoh, kita akan menggunakan pengaturan berikut, yang terdiri dari 2 konstanta untuk nama file sumber dan tujuan serta langkah pembersihan agar dapat menjalankan pengujian beberapa kali:

private final String FILE_TO_MOVE = "src/test/resources/originalFileToMove.txt"; private final String TARGET_FILE = "src/test/resources/targetFileToMove.txt"; @BeforeEach public void createFileToMove() throws IOException { File fileToMove = new File(FILE_TO_MOVE); fileToMove.createNewFile(); } @AfterEach public void cleanUpFiles() { File targetFile = new File(TARGET_FILE); targetFile.delete(); }

3. Menggunakan Jalur NIO dan Kelas File

Mari kita mulai dengan menggunakan Files.move () metode dari paket Java NIO:

@Test public void givenUsingNio_whenMovingFile_thenCorrect() throws IOException { Path fileToMovePath = Paths.get(FILE_TO_MOVE); Path targetPath = Paths.get(TARGET_FILE); Files.move(fileToMovePath, targetPath); }

Di JDK7 paket NIO diperbarui secara signifikan, dan kelas Path ditambahkan. Ini menyediakan metode untuk manipulasi artefak Sistem File yang nyaman.

Perhatikan bahwa file dan direktori target harus ada.

4. Menggunakan Kelas File

Sekarang mari kita lihat bagaimana kita dapat melakukan hal yang sama menggunakan metode File.renameTo () :

@Test public void givenUsingFileClass_whenMovingFile_thenCorrect() throws IOException { File fileToMove = new File(FILE_TO_MOVE); boolean isMoved = fileToMove.renameTo(new File(TARGET_FILE)); if (!isMoved) { throw new FileSystemException(TARGET_FILE); } }

Dalam contoh ini, file yang akan dipindahkan memang ada, serta direktori target.

Perhatikan bahwa renameTo () hanya memunculkan dua jenis pengecualian:

  • SecurityException - jika manajer keamanan menolak menulis akses ke sumber atau tujuan
  • NullPointerException - jika target parameter adalah null

Jika target tidak ada dalam sistem file - tidak ada pengecualian yang akan dilempar - dan Anda harus memeriksa tanda keberhasilan yang dikembalikan dari metode tersebut.

5. Menggunakan Jambu Biji

Selanjutnya - mari kita lihat solusi Guava, yang menyediakan metode Files.move () yang nyaman:

@Test public void givenUsingGuava_whenMovingFile_thenCorrect() throws IOException { File fileToMove = new File(FILE_TO_MOVE); File targetFile = new File(TARGET_FILE); com.google.common.io.Files.move(fileToMove, targetFile); }

Sekali lagi, dalam contoh ini, file yang akan dipindahkan dan direktori target harus ada.

6. Dengan Commons IO

Terakhir, mari kita lihat solusi dengan Apache Commons IO - mungkin yang paling sederhana:

@Test public void givenUsingApache_whenMovingFile_thenCorrect() throws IOException { FileUtils.moveFile(FileUtils.getFile(FILE_TO_MOVE), FileUtils.getFile(TARGET_FILE)); }

Baris yang satu ini, tentu saja, memungkinkan pemindahan atau penggantian nama, tergantung pada apakah direktori targetnya sama atau tidak.

Alternatifnya - berikut adalah solusi untuk memindahkan secara khusus, juga memungkinkan kami untuk secara otomatis membuat direktori tujuan jika belum ada:

@Test public void givenUsingApache_whenMovingFileApproach2_thenCorrect() throws IOException { FileUtils.moveFileToDirectory( FileUtils.getFile("src/test/resources/fileToMove.txt"), FileUtils.getFile("src/main/resources/"), true); }

6. Kesimpulan

Pada artikel ini, kami melihat berbagai solusi untuk memindahkan file di Java. Kami fokus pada penggantian nama di cuplikan kode ini, tetapi pemindahan, tentu saja, sama, hanya direktori target yang perlu berbeda.

Kode untuk contoh tersedia di GitHub.