Java - Namakan semula atau Pindahkan Fail

1. Gambaran keseluruhan

Dalam tutorial ringkas ini, kita akan melihat menamakan semula / memindahkan Fail di Java.

Mula-mula kita akan melihat penggunaan kelas Files and Path dari NIO, kemudian kelas Java File , Google Guava, dan akhirnya perpustakaan Apache Commons IO.

Artikel ini adalah sebahagian daripada siri " Java - Back to Basic " di Baeldung.

2. Persediaan

Dalam contohnya, kami akan menggunakan persediaan berikut, yang terdiri daripada 2 pemalar untuk nama fail sumber dan tujuan dan langkah pembersihan untuk dapat menjalankan ujian 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 Kelas Laluan dan Fail NIO

Mulakan dengan menggunakan Files.move () kaedah dari pakej 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, pakej NIO telah dikemas kini dengan ketara, dan kelas Path ditambahkan. Ini menyediakan kaedah untuk manipulasi artifak Sistem Fail dengan mudah.

Perhatikan bahawa kedua-dua fail dan direktori sasaran harus ada.

4. Menggunakan Kelas Fail

Sekarang mari kita lihat bagaimana kita dapat melakukan perkara yang sama menggunakan kaedah 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, begitu juga dengan direktori sasaran.

Perhatikan bahawa renameTo () hanya membuang dua jenis pengecualian:

  • SecurityException - jika pengurus keselamatan menolak akses menulis ke sumber atau ke destinasi
  • NullPointerException - sekiranya sasaran parameter adalah nol

Sekiranya sasaran tidak ada dalam sistem fail - tidak ada pengecualian yang akan dilemparkan - dan anda harus memeriksa bendera kejayaan yang dikembalikan.

5. Menggunakan Jambu Batu

Seterusnya - mari kita lihat penyelesaian Jambu, yang menyediakan kaedah Files.move () yang mudah :

@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, fail yang akan dipindahkan dan direktori sasaran perlu ada.

6. Dengan Commons IO

Akhirnya, mari kita lihat penyelesaian dengan Apache Commons IO - mungkin yang paling mudah:

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

Satu baris ini, tentu saja, membolehkan bergerak atau menamakan semula, bergantung pada apakah direktori sasarannya sama atau tidak.

Sebagai alternatif - berikut adalah penyelesaian untuk bergerak secara khusus, juga memungkinkan kita membuat direktori tujuan secara automatik 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. Kesimpulannya

Dalam artikel ini, kami melihat penyelesaian yang berbeza untuk memindahkan fail di Java. Kami fokus menamakan semula dalam coretan kod ini, tetapi tentu saja bergerak sama, hanya direktori sasaran yang perlu berbeza.

Kod untuk contoh boleh didapati di GitHub.