Java - Hernoem of verplaats een bestand

1. Overzicht

In deze korte tutorial gaan we kijken naar hernoemen / verplaatsen van een bestand in Java.

We zullen eerst kijken naar het gebruik van de Bestanden en Pad klassen van NIO, dan de Java het dossier class, Google Guava en tot slot de Apache Commons IO-bibliotheek.

Dit artikel maakt deel uit van de “Java - Terug naar Basic”Serie hier op Baeldung.

2. Installatie

In de voorbeelden gebruiken we de volgende setup, die bestaat uit 2 constanten voor de bron- en doelbestandsnaam en een opschoningsstap om de tests meerdere keren uit te kunnen voeren:

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

3. Met behulp van de NIO Paden en Bestanden Klassen

Laten we beginnen de ... gebruiken Files.move () methode uit het Java NIO-pakket:

@Test openbare leegte gegevenUsingNio_whenMovingFile_thenCorrect () gooit IOException {Path fileToMovePath = Paths.get (FILE_TO_MOVE); Pad targetPath = Paths.get (TARGET_FILE); Files.move (fileToMovePath, targetPath); }

In JDK7 is het NIO-pakket aanzienlijk bijgewerkt, en het Pad klasse toegevoegd. Dit biedt methoden voor gemakkelijke manipulatie van bestandssysteemartefacten.

Merk op dat zowel het bestand als de doelmap moeten bestaan.

4. Gebruik de het dossier Klasse

Laten we nu kijken hoe we hetzelfde kunnen doen de ... gebruiken Bestand.renameTo () methode:

@Test openbare leegte gegevenUsingFileClass_whenMovingFile_thenCorrect () gooit IOException {File fileToMove = nieuw bestand (FILE_TO_MOVE); boolean isMoved = fileToMove.renameTo (nieuw bestand (TARGET_FILE)); if (! isMoved) {throw nieuwe FileSystemException (TARGET_FILE); }}

In dit voorbeeld bestaat het te verplaatsen bestand, evenals de doelmap.

Let daar op hernoemenTo () gooit slechts twee soorten uitzonderingen:

  • Beveiligingsuitzondering - als een beveiligingsmanager schrijftoegang tot de bron of de bestemming weigert
  • NullPointerException - in het geval dat het parameterdoel nul is

Als het doel niet bestaat in een bestandssysteem - wordt er geen uitzondering gegenereerd - en moet u de geretourneerde succesvlag van de methode controleren.

5. Guava gebruiken

Vervolgens - laten we eens kijken naar de Guava-oplossing, die een handige oplossing biedt Files.move () methode:

@Test openbare leegte gegevenUsingGuava_whenMovingFile_thenCorrect () gooit IOException {File fileToMove = nieuw bestand (FILE_TO_MOVE); Bestand targetFile = nieuw bestand (TARGET_FILE); com.google.common.io.Files.move (fileToMove, targetFile); }

Nogmaals, in dit voorbeeld moeten het te verplaatsen bestand en de doelmap bestaan.

6. Met Commons IO

Laten we tot slot eens kijken naar een oplossing met Apache Commons IO - waarschijnlijk de eenvoudigste:

@Test openbare leegte gegevenUsingApache_whenMovingFile_thenCorrect () gooit IOException {FileUtils.moveFile (FileUtils.getFile (FILE_TO_MOVE), FileUtils.getFile (TARGET_FILE)); }

Deze ene regel staat natuurlijk zowel verplaatsen als hernoemen toe, afhankelijk van of de doeldirectory hetzelfde is of niet.

Alternatief - hier is een oplossing om specifiek te verhuizen, waardoor we ook automatisch de bestemmingsmap kunnen maken als deze nog niet bestaat:

@Test openbare leegte gegevenUsingApache_whenMovingFileApproach2_thenCorrect () gooit IOException {FileUtils.moveFileToDirectory (FileUtils.getFile ("src / test / resources / fileToMove.txt"), FileUtils.getFile ("src / main / resources /"), true; }

6. Conclusie

In dit artikel hebben we verschillende oplossingen bekeken voor het verplaatsen van een bestand in Java. We hebben ons gericht op het hernoemen van deze codefragmenten, maar verplaatsen is natuurlijk hetzelfde, alleen de doeldirectory hoeft anders te zijn.

De code voor de voorbeelden is beschikbaar op GitHub.