Java - Premenovanie alebo presunutie súboru

1. Prehľad

V tomto rýchlom návode sa pozrieme na premenovanie / presun súboru v Jave.

Najprv sa pozrieme na používanie súboru Súbory a Cesta triedy z NIO, potom Java Súbor triedy, Google Guava a nakoniec knižnica Apache Commons IO.

Tento článok je súčasťou „Java - späť na základné”Séria tu na Baeldungu.

2. Inštalácia

V príkladoch použijeme nasledujúce nastavenie, ktoré sa skladá z 2 konštánt pre názov zdrojového a cieľového súboru a z kroku čistenia, aby bolo možné testy spustiť viackrát:

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 () vyvolá IOException {File fileToMove = new File (FILE_TO_MOVE); fileToMove.createNewFile (); } @AfterEach public void cleanUpFiles () {File targetFile = new File (TARGET_FILE); targetFile.delete (); }

3. Používanie NIO Cesty a Súbory Triedy

Začnime tým pomocou Files.move () metóda z balíka Java NIO:

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

V JDK7 bol balíček NIO výrazne aktualizovaný a Cesta trieda pridaná. Toto poskytuje metódy na pohodlnú manipuláciu s artefaktmi súborového systému.

Súbor aj cieľový adresár by mali existovať.

4. Pomocou Súbor Trieda

Pozrime sa teraz na to, ako môžeme urobiť to isté pomocou File.renameTo () metóda:

@ Test public void givenUsingFileClass_whenMovingFile_thenCorrect () vyvolá IOException {File fileToMove = nový súbor (FILE_TO_MOVE); boolean isMoved = fileToMove.renameTo (nový súbor (TARGET_FILE)); if (! isMoved) {throw new FileSystemException (TARGET_FILE); }}

V tomto príklade súbor, ktorý sa má presunúť, existuje rovnako ako cieľový adresár.

Poznač si to renameTo () vyvolá iba dva typy výnimiek:

  • Výnimka zabezpečenia - ak bezpečnostný manažér odmietne prístup na zápis k zdroju alebo k cieľu
  • NullPointerException - v prípade, že cieľ parametra je null

Ak cieľ v súborovom systéme neexistuje - nebude vyvolaná žiadna výnimka - a budete musieť skontrolovať vrátený príznak úspechu metódy.

5. Používanie Guavy

Ďalej - poďme sa pozrieť na riešenie Guava, ktoré poskytuje pohodlné riešenie Files.move () metóda:

@Test public void givenUsingGuava_whenMovingFile_thenCorrect () vyvolá IOException {File fileToMove = nový súbor (FILE_TO_MOVE); Súbor targetFile = nový súbor (TARGET_FILE); com.google.common.io.Files.move (fileToMove, targetFile); }

Aj v tomto príklade musí opäť existovať súbor, ktorý sa má presunúť, a cieľový adresár.

6. S Commons IO

Na záver sa pozrime na riešenie s Apache Commons IO - pravdepodobne najjednoduchšie:

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

Tento jeden riadok samozrejme umožní presun aj premenovanie, podľa toho, či je cieľový adresár rovnaký alebo nie.

Prípadne - tu je riešenie konkrétneho presunu, ktoré nám tiež umožňuje automaticky vytvoriť cieľový adresár, ak ešte neexistuje:

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

6. Záver

V tomto článku sme sa pozreli na rôzne riešenia presunu súboru v Jave. V týchto úryvkoch kódu sme sa zamerali na premenovanie, ale presun je samozrejme rovnaký, iba cieľový adresár sa musí líšiť.

Kód príkladov je k dispozícii na GitHub.