Java - Gi nytt navn eller flytt en fil

1. Oversikt

I denne raske opplæringen skal vi se på endre navn på / flytte en fil i Java.

Vi skal først se på bruk av Filer og Sti klasser fra NIO, deretter Java Fil klasse, Google Guava, og til slutt Apache Commons IO-biblioteket.

Denne artikkelen er en del avJava - Tilbake til Basic”-Serien her på Baeldung.

2. Oppsett

I eksemplene bruker vi følgende oppsett, som består av to konstanter for kilde- og destinasjonsfilnavnet og et oppryddingstrinn for å kunne kjøre testene flere ganger:

privat finale String FILE_TO_MOVE = "src / test / resources / originalFileToMove.txt"; privat sluttstreng TARGET_FILE = "src / test / resources / targetFileToMove.txt"; @BeforeEach public void createFileToMove () kaster IOException {File fileToMove = ny fil (FILE_TO_MOVE); fileToMove.createNewFile (); } @AfterEach public void cleanUpFiles () {File targetFile = new File (TARGET_FILE); targetFile.delete (); }

3. Bruke NIO Stier og Filer Klasser

La oss starte med bruker Files.move () metode fra Java NIO-pakken:

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

I JDK7 ble NIO-pakken betydelig oppdatert, og Sti klasse lagt til. Dette gir metoder for praktisk manipulering av filsystemartefakter.

Merk at både filen og målkatalogen skal eksistere.

4. Bruke Fil Klasse

La oss nå se på hvordan vi kan gjøre det samme bruker File.renameTo () metode:

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

I dette eksemplet finnes filen som skal flyttes, så vel som målkatalogen.

Noter det endre navn på () kaster bare to typer unntak:

  • SecurityException - hvis en sikkerhetsleder nekter skrivetilgang til enten kilden eller til destinasjonen
  • NullPointerException - i tilfelle parametermålet er null

Hvis målet ikke eksisterer i et filsystem - vil det ikke bli kastet noe unntak - og du må sjekke det returnerte suksessflagget til metoden.

5. Bruke Guava

Neste - la oss ta en titt på Guava-løsningen, som gir en praktisk Files.move () metode:

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

Igjen, i dette eksemplet, må filen som skal flyttes, og målkatalogen eksistere.

6. Med Commons IO

Til slutt, la oss ta en titt på en løsning med Apache Commons IO - sannsynligvis den enkleste:

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

Denne linjen vil selvfølgelig tillate både flytting eller omdøping, avhengig av om målkatalogen er den samme eller ikke.

Alternativt - her er en løsning for å flytte spesifikt, slik at vi også automatisk kan opprette destinasjonskatalogen hvis den ikke allerede eksisterer:

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

6. Konklusjon

I denne artikkelen så vi på forskjellige løsninger for å flytte en fil i Java. Vi fokuserte på å gi nytt navn i disse kodebitene, men flytting er selvfølgelig det samme, bare målkatalogen trenger å være annerledes.

Koden for eksemplene er tilgjengelig på GitHub.


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