In enkele scenario's moet u een bestand in Java kopiëren. Mogelijk maakt u een eenvoudig script om processen voor een bestandsbeheerder te automatiseren. Je zou zelfs een complete applicatie kunnen schrijven die met bestanden werkt.

Er zijn veel manieren waarop u een bestand kunt kopiëren, afhankelijk van uw vereiste prestaties, eenvoud of zelfs welke Java-versie u gebruikt.

Bestanden kopiëren met FileInputStream en FileOutputStream

Deze methode werkt door handmatig elke byte aan gegevens uit het bestand te lezen en naar een nieuwe bestemming te schrijven. In tegenstelling tot de onderstaande methode Files.copy, kunt u deze methode gebruiken voor alle Java-versies, inclusief Java 6 en eerder.

Het gebruikt de klasse FileInputStream om bytes uit een bronbestand te lezen en de FileOutputStream om bytes naar de bestemming te schrijven.

  1. Maak ergens op uw computer een bestand met de naam "SimpleScript.java".
  2. Open het bestand in een teksteditor of IDE en kopieer de volgende basiscode naar de toepassing.
    instagram viewer
    importeren java.io. IOUitzondering;

    klasSimpleScript{
    openbaarstatischleegtehoofd(Tekenreeksargumenten[])worpen IOUitzondering {
    // Uw code hier
    }
    }

  3. Importeer deze extra klassen Input Stream en Output Stream bovenaan het bestand, net na de eerste importinstructie.
    importeren java.io. Bestand;
    importeren java.io. InvoerStream;
    importeren java.io. UitvoerStream;
    importeren java.io. Bestandsinvoerstroom;
    importeren java.io. FileOutputStream;
  4. Maak een nieuw bestand met de naam "Copy-File-1.txt", in dezelfde map als uw SimpleScript.java-bestand. Voeg geschreven inhoud toe aan het bestand.
  5. Maak in dezelfde map ook een nieuwe map met de naam "Bestemming". Het doel is om het bestand "Copy-File-1.txt" naar de nieuwe map te kopiëren.
  6. Gebruik in de hoofdfunctie van de klasse de klasse Bestand om twee nieuwe bestandsobjecten te maken. De bron, dit is het bestand dat u wilt kopiëren, en de bestemming, waar u het bestand naartoe wilt kopiëren. Als het doelbestand niet bestaat, maakt uw programma een nieuw bestand aan.
    klasSimpleScript{ 
    openbaarstatischleegtehoofd(Tekenreeksargumenten[])worpen IOUitzondering {
    // 1e manier om een ​​bestand te kopiëren
    Bestandsbron = nieuwe File("Kopieer-Bestand-1.tekst");
    Bestandsbestemming = nieuwe File("Bestemming/Kopieer-Bestand-1.tekst");
    }
    }
  7. Maak daarna een InputStream- en OutputStream-object.
    InputStream-invoer = nul;
    UitgangStream-uitgang = nul;
  8. Gebruik de invoerstroom om de gegevens in bytes te lezen en de uitvoerstroom om de gegevens naar de nieuwe locatie te schrijven.
    proberen {
    // Maak FileInputStream- en FileOutputStream-objecten
    invoer = nieuwe FileInputStream (bron);
    uitgang = nieuwe FileOutputStream (bestemming);
    byte[] buf = nieuwebyte[1024];
    int bytesLees;

    // Schrijf bytes naar de bestemming
    terwijl ((bytesRead = input.read (buf)) > 0) {
    output.write (buf, 0, bytesRead);
    }
    } vangst (IOUitzondering e) {
    e.printStackTrace();
    System.out.println("Kon het bestand niet naar de bestemming kopiëren: " + destination.getPath() + ". Controleren als de map of het bestand bestaat al.");
    } Tenslotte {
    // Sluit de streams
    als (invoer != nul) {
    invoer.sluiten();
    }

    als (uitvoer != nul) {
    uitvoer.close();
    }
    }

    System.out.println("Bestand gekopieerd");

  9. Open een opdrachtregel om het script uit te voeren. Navigeer naar de map waar u uw Java-bestand hebt opgeslagen met behulp van de cd-opdracht op de Windows-opdrachtprompt of de Mac-terminal.
    CD Bureaublad
  10. Om het script te compileren, slaat u het Java-bestand op en voert u de Javac opdracht in de opdrachtregel:
    javac SimpleScript.java
  11. Gebruik de om het script uit te voeren Java opdracht:
    java SimpleScript
    U zou een enkele uitvoerregel zonder fouten moeten zien:
  12. Navigeer naar uw map "Bestemming" om uw gekopieerde bestand te bekijken.
  13. Open het bestand om de inhoud te bekijken die uw programma uit het originele bestand heeft gekopieerd.

Bestanden kopiëren met Files.copy

Als u Java 7 of hoger gebruikt, kunt u de methode Files.copy gebruiken. Deze methode is over het algemeen een eenvoudiger implementatie. Volgens de Java-documentatie, zijn er meerdere overbelastingen voor de functie.

De methode Files.copy kan bijvoorbeeld ook een invoerstroom gebruiken om bestanden van de ene naar de andere locatie te kopiëren, maar via een methode die minder code gebruikt. U kunt ook Paden gebruiken, of zelf specificeren hoe u wilt dat de methode uw bestand kopieert.

  1. Maak een nieuw bestand met de naam "Copy-File-2.txt", in dezelfde map als uw SimpleScript.java-bestand. Voeg geschreven inhoud toe aan het bestand.
  2. Voeg bovenaan het bestand imports toe voor het "java.nio.file. Paden" en "java.nio.file. bestanden" klassen.
    importeren java.nio.bestand. paden;
    importeren java.nio.bestand. bestanden;
  3. Voeg twee tekenreeksen toe, die het relatieve bestandspad voor het bronbestand en de bestemming vertegenwoordigen. Gebruik de methode Files.copy, die de logica al afhandelt om het bestand naar de bestemming te kopiëren.
    String copySource = "Kopieer-bestand-2.tekst";
    String copyDestination = "Destination/Copy-File-2.tekst";

    proberen {
    Files.copy (Paths.get (copySource), Paths.get (copyDestination));
    } vangst (Uitzondering e) {
    System.out.println("Kon het bestand niet naar de bestemming kopiëren: " + copyDestination + ". Controleren als de map of het bestand bestaat al.");
    }
    Systeem.uit.println("2nd Bestand gekopieerd");

  4. Voer het script uit met behulp van de Javac- en Java-opdrachten.
  5. Navigeer naar uw map "Bestemming" om uw gekopieerde bestand te bekijken.

Bestanden kopiëren met FileChannel.transferTo()

Volgens de Java-documentatie, kan deze methode een potentieel snellere manier zijn om bestanden te kopiëren. Dit hangt echter af van de manier waarop u de functie implementeert.

  1. Maak een nieuw bestand met de naam "Copy-File-3.txt", in dezelfde map als uw SimpleScript.java-bestand. Voeg wat voorbeeldinhoud toe aan dit bestand.
  2. Importeer bovenaan SimpleScript.java de "java.nio.channels. FileChannel"-klasse naast drie van de vorige algemene bestandsgerelateerde klassen uit het io-pakket.
    importeren java.io. Bestand;
    importeren java.io. Bestandsinvoerstroom;
    importeren java.io. FileOutputStream;
    importeren java.nio.kanalen. Bestandskanaal;
  3. Maak bestandsobjecten voor de bron en het doel en gebruik deze om een ​​invoerstroom en een uitvoerstroom te maken.
    Bestand src = nieuwe File("Kopieer-Bestand-3.tekst");
    Bestand dst = nieuwe File("Bestemming/Kopieer-Bestand-3.tekst");
    FileInputStream inStream = nieuwe FileInputStream (src);
    FileOutputStream outStream = nieuwe FileOutputStream (dst);
  4. Gebruik de TransferTo-methode van de FileChannel-klasse om het bestand naar de bestemming te kopiëren.
    proberen {
    FileChannel inChannel = inStream.getChannel();
    FileChannel outChannel = outStream.getChannel();
    inChannel.transferTo(0, inChannel.size(), outChannel);
    } vangst (Uitzondering e) {
    System.out.println("Kon het bestand niet naar de bestemming kopiëren: " + dst.getPath() + ". Controleren als de map of het bestand bestaat al.");
    } Tenslotte {
    // Sluit de streams
    inStream.close();
    outStream.close();
    }
    Systeem.uit.println("3rd Bestand gekopieerd");
  5. Voer het script uit met behulp van de Javac- en Java-opdrachten.
  6. Navigeer naar uw map "Bestemming" om uw gekopieerde bestand te bekijken.

Bestanden kopiëren in Java is nog maar het begin

Er zijn veel manieren waarop u een bestand in Java kunt kopiëren. Drie mogelijke manieren zijn onder meer het gebruik van de traditionele stream-methode, de Files.copy-methode of de transferTo-methode.

Er zijn veel andere bestandsbeheerbewerkingen die u met Java kunt uitvoeren. Sommige hiervan omvatten het verplaatsen van bestanden, het verwijderen van bestanden of het zippen van bestanden. Deze kunnen handig zijn om te leren of u bepaalde processen in bestandsbeheer moet automatiseren.