Java - Omdøb eller flyt en fil

1. Oversigt

I denne hurtige vejledning skal vi se på omdøbe / flytte en fil i Java.

Vi undersøger først brugen af Filer og Sti klasser fra NIO, derefter Java Fil klasse, Google Guava og endelig Apache Commons IO-biblioteket.

Denne artikel er en del af "Java - Tilbage til Basic”-Serien her på Baeldung.

2. Opsætning

I eksemplerne bruger vi følgende opsætning, der består af 2 konstanter til kilde- og destinationsfilnavnet og et oprydningstrin for at kunne køre testene flere gange:

privat endelig String FILE_TO_MOVE = "src / test / resources / originalFileToMove.txt"; privat endelig streng TARGET_FILE = "src / test / resources / targetFileToMove.txt"; @BeforeEach public void createFileToMove () smider IOException {File fileToMove = ny fil (FILE_TO_MOVE); fileToMove.createNewFile (); } @AfterEach offentlig ugyldig cleanUpFiles () {File targetFile = ny fil (TARGET_FILE); targetFile.delete (); }

3. Brug af NIO Stier og Filer Klasser

Lad os starte med bruger Files.move () metode fra Java NIO-pakken:

@Test offentlig ugyldighed givenUsingNio_whenMovingFile_thenCorrect () kaster IOException {Path fileToMovePath = Paths.get (FILE_TO_MOVE); Sti targetPath = Paths.get (TARGET_FILE); Files.move (fileToMovePath, targetPath); }

I JDK7 blev NIO-pakken opdateret markant, og Sti klasse tilføjet. Dette giver metoder til bekvem manipulation af filsystemartefakter.

Bemærk, at både filen og målmappen skal eksistere.

4. Brug af Fil Klasse

Lad os nu se på, hvordan vi kan gøre det samme bruger File.renameTo () metode:

@Test offentlig ugyldighed givenUsingFileClass_whenMovingFile_thenCorrect () kaster IOException {File fileToMove = ny fil (FILE_TO_MOVE); boolsk isMoved = fileToMove.renameTo (ny fil (TARGET_FILE)); hvis (! isMoved) {kast ny FileSystemException (TARGET_FILE); }}

I dette eksempel findes den fil, der skal flyttes, såvel som målkataloget.

Noter det omdøbe til () kaster kun to typer undtagelser:

  • Sikkerhedsundtagelse - hvis en sikkerhedschef nægter skriftlig adgang til enten kilden eller til destinationen
  • NullPointerException - hvis parametermålet er nul

Hvis målet ikke findes i et filsystem - kastes der ingen undtagelse - og du bliver nødt til at kontrollere det returnerede succesflag for metoden.

5. Brug af Guava

Dernæst - lad os se på Guava-løsningen, som giver en praktisk Files.move () metode:

@Test offentlig ugyldighed givenUsingGuava_whenMovingFile_thenCorrect () kaster IOException {File fileToMove = ny fil (FILE_TO_MOVE); Fil targetFile = ny fil (TARGET_FILE); com.google.common.io.Files.move (fileToMove, targetFile); }

Igen, i dette eksempel skal den fil, der skal flyttes, og målmappen eksistere.

6. Med Commons IO

Lad os endelig se på en løsning med Apache Commons IO - sandsynligvis den enkleste:

@Test offentlig ugyldighed givenUsingApache_whenMovingFile_thenCorrect () kaster IOException {FileUtils.moveFile (FileUtils.getFile (FILE_TO_MOVE), FileUtils.getFile (TARGET_FILE)); }

Denne ene linje tillader naturligvis både flytning eller omdøbning, afhængigt af om målmappen er den samme eller ikke.

Alternativt - her er en løsning til at flytte specifikt, hvilket også giver os mulighed for automatisk at oprette destinationsmappen, hvis den ikke allerede findes:

@Test offentlig ugyldighed givenUsingApache_whenMovingFileApproach2_thenCorrect () kaster IOException {FileUtils.moveFileToDirectory (FileUtils.getFile ("src / test / resources / fileToMove.txt"), FileUtils.getFile ("src / main / resources /") }

6. Konklusion

I denne artikel kiggede vi på forskellige løsninger til flytning af en fil i Java. Vi fokuserede på omdøbning i disse kodestykker, men flytning er selvfølgelig det samme, kun målmappen skal være anderledes.

Koden til eksemplerne er tilgængelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found