Nogle få scenarier kræver, at du kopierer en fil i Java. Du opretter muligvis et simpelt script til at automatisere processer til en filhåndtering. Du kan endda skrive et komplet program, der fungerer med filer.
Der er mange måder, hvorpå du kan kopiere en fil, afhængigt af din nødvendige ydeevne, enkelhed eller endda hvilken Java-version du bruger.
Sådan kopieres filer ved hjælp af FileInputStream og FileOutputStream
Denne metode virker ved manuelt at læse hver byte af data fra filen og skrive den til en ny destination. I modsætning til Files.copy-metoden nedenfor, kan du bruge denne metode til alle Java-versioner, inklusive Java 6 og tidligere.
Den bruger FileInputStream-klassen til at læse bytes fra en kildefil, og FileOutputStream til at skrive bytes til destinationen.
- Opret en fil hvor som helst på din computer kaldet "SimpleScript.java".
- Åbn filen i en teksteditor eller IDE, og kopier følgende basiskode til applikationen.
importere java.io. IOException;
klasseSimpleScript{
offentligstatiskugyldigvigtigste(String args[])kaster IOException {
// Din kode her
}
} - Importer disse ekstra Input Stream og Output Stream klasser øverst i filen, lige efter den første importerklæring.
importere java.io. Fil;
importere java.io. InputStream;
importere java.io. OutputStream;
importere java.io. FileInputStream;
importere java.io. FileOutputStream; - Opret en ny fil kaldet "Copy-File-1.txt", i samme mappe som din SimpleScript.java-fil. Tilføj eventuelt skrevet indhold i filen.
- I samme mappe skal du også oprette en ny mappe kaldet "Destination". Målet er at kopiere filen "Copy-File-1.txt" til den nye mappe.
- Inde i klassens hovedfunktion skal du bruge klassen File til at oprette to nye filobjekter. Kilden, som vil være den fil, du vil kopiere, og destinationen, som vil være, hvor du vil kopiere filen til. Hvis destinationsfilen ikke eksisterer, vil dit program oprette en ny.
klasseSimpleScript{
offentligstatiskugyldigvigtigste(String args[])kaster IOException {
// 1. måde at kopiere en fil på
Filkilde = ny Fil("Kopier-Fil-1.txt");
Fildestination = ny Fil("Destination/Kopier-Fil-1.txt");
}
} - Derefter skal du oprette et InputStream- og OutputStream-objekt.
InputStream input = nul;
OutputStream output = nul; - Brug inputstrømmen til at læse dataene i bytes, og outputstrømmen til at skrive dataene til den nye placering.
prøve {
// Opret FileInputStream- og FileOutputStream-objekter
input = ny FileInputStream (kilde);
output = ny FileOutputStream (destination);
byte[] buf = nybyte[1024];
int bytesLæs;// Skriv bytes til destinationen
mens ((bytesRead = input.read (buf)) > 0) {
output.write (buf, 0, bytesLæs);
}
} fangst (IOException e) {
e.printStackTrace();
System.out.println("Kunne ikke kopiere filen til destinationen: " + destination.getPath() + ". Kontrollere hvis mappen eller filen findes allerede.");
} langt om længe {
// Luk vandløbene
hvis (input != nul) {
input.close();
}hvis (output != nul) {
output.close();
}
}System.out.println("Fil kopieret");
- For at køre scriptet skal du åbne en kommandolinje. Naviger til den mappe, hvor du gemte din Java-fil ved hjælp af cd-kommandoen på Windows kommandoprompt eller Mac-terminalen.
cd Desktop
- For at kompilere scriptet skal du gemme Java-filen og køre Javac kommando i kommandolinjen:
javac SimpleScript.java
- For at køre scriptet skal du bruge Java kommando:
Du bør se en enkelt outputlinje uden fejl:java SimpleScript
- Naviger til din "Destination"-mappe for at se din kopierede fil.
- Åbn filen for at se indholdet, som dit program kopierede fra den originale fil.
Sådan kopierer du filer ved hjælp af Files.copy
Hvis du bruger Java 7 eller nyere, kan du bruge Files.copy-metoden. Denne metode er generelt en enklere implementering. Ifølge Java dokumentation, er der flere overbelastninger for funktionen.
For eksempel kan Files.copy-metoden også bruge en inputstrøm til at kopiere filer fra en placering til en anden, men gennem en metode, der bruger mindre kode. Du kan også bruge Stier, eller selv angive, hvordan du vil have metoden til at kopiere din fil.
- Opret en ny fil kaldet "Copy-File-2.txt", i samme mappe som din SimpleScript.java-fil. Tilføj eventuelt skrevet indhold i filen.
- Øverst i filen skal du tilføje importer til "java.nio.file. Stier" og "java.nio.file. filer" klasser.
importere java.nio.fil. stier;
importere java.nio.fil. Filer; - Tilføj to strenge, der repræsenterer den relative filsti for kildefilen og destinationen. Brug metoden Files.copy, som allerede vil håndtere logikken for at kopiere filen til destinationen.
String copySource = "Copy-File-2.txt";
String copyDestination = "Destination/Copy-File-2.txt";prøve {
Files.copy (Paths.get (copySource), Paths.get (copyDestination));
} fangst (Undtagelse e) {
System.out.println("Kunne ikke kopiere filen til destinationen: " + copyDestination + ". Kontrollere hvis mappen eller filen findes allerede.");
}
System.out.println("2nd Fil kopieret"); - Kør scriptet ved hjælp af Java- og Java-kommandoerne.
- Naviger til din "Destination"-mappe for at se din kopierede fil.
Sådan kopieres filer ved hjælp af FileChannel.transferTo()
Ifølge Java dokumentation, kan denne metode være en potentielt hurtigere måde at kopiere filer på. Dette vil dog afhænge af, hvordan du implementerer funktionen.
- Opret en ny fil kaldet "Copy-File-3.txt", i samme mappe som din SimpleScript.java-fil. Tilføj noget eksempelindhold til denne fil.
- Øverst i SimpleScript.java skal du importere "java.nio.channels. FileChannel"-klassen sammen med tre af de tidligere almindelige filrelaterede klasser fra io-pakken.
importere java.io. Fil;
importere java.io. FileInputStream;
importere java.io. FileOutputStream;
importere java.nio.kanaler. FileChannel; - Opret filobjekter til kilden og destinationen, og brug dem til at oprette en inputstrøm og en outputstrøm.
Fil src = ny Fil("Kopier-Fil-3.txt");
Fil dst = ny Fil("Destination/Kopier-Fil-3.txt");
FileInputStream inStream = ny FileInputStream (src);
FileOutputStream outStream = ny FileOutputStream (dst); - Brug TransferTo-metoden fra FileChannel-klassen til at kopiere filen til dens destination.
prøve {
FileChannel inChannel = inStream.getChannel();
FileChannel outChannel = outStream.getChannel();
inChannel.transferTo(0, inChannel.size(), outChannel);
} fangst (Undtagelse e) {
System.out.println("Kunne ikke kopiere filen til destinationen: " + dst.getPath() + ". Kontrollere hvis mappen eller filen findes allerede.");
} langt om længe {
// Luk vandløbene
inStream.close();
outStream.close();
}
System.out.println("3rd Fil kopieret"); - Kør scriptet ved hjælp af Java- og Java-kommandoerne.
- Naviger til din "Destination"-mappe for at se din kopierede fil.
Kopiering af filer i Java er kun begyndelsen
Der er mange måder, hvorpå du kan kopiere en fil i Java. Tre mulige måder inkluderer at bruge den traditionelle stream-metode, Files.copy-metoden eller transferTo-metoden.
Der er mange andre filhåndteringsoperationer, du kan udføre ved hjælp af Java. Nogle af disse omfatter flytning af filer, sletning af filer eller zipping af filer. Disse kan være nyttige at lære, hvis du har brug for at automatisere bestemte processer i filhåndteringen.