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.