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.
- Maak ergens op uw computer een bestand met de naam "SimpleScript.java".
- Open het bestand in een teksteditor of IDE en kopieer de volgende basiscode naar de toepassing.
importeren java.io. IOUitzondering;
klasSimpleScript{
openbaarstatischleegtehoofd(Tekenreeksargumenten[])worpen IOUitzondering {
// Uw code hier
}
} - 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; - 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.
- 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.
- 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");
}
} - Maak daarna een InputStream- en OutputStream-object.
InputStream-invoer = nul;
UitgangStream-uitgang = nul; - 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");
- 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
- Om het script te compileren, slaat u het Java-bestand op en voert u de Javac opdracht in de opdrachtregel:
javac SimpleScript.java
- Gebruik de om het script uit te voeren Java opdracht:
U zou een enkele uitvoerregel zonder fouten moeten zien:java SimpleScript
- Navigeer naar uw map "Bestemming" om uw gekopieerde bestand te bekijken.
- 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.
- 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.
- 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; - 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"); - Voer het script uit met behulp van de Javac- en Java-opdrachten.
- 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.
- 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.
- 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; - 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); - 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"); - Voer het script uit met behulp van de Javac- en Java-opdrachten.
- 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.