Noen få scenarier krever at du kopierer en fil i Java. Du lager kanskje et enkelt skript for å automatisere prosesser for en filbehandler. Du kan til og med skrive en fullverdig applikasjon som fungerer med filer.
Det er mange måter du kan kopiere en fil på, avhengig av ønsket ytelse, enkelhet eller til og med hvilken Java-versjon du bruker.
Hvordan kopiere filer ved hjelp av FileInputStream og FileOutputStream
Denne metoden fungerer ved å manuelt lese hver byte med data fra filen, og skrive den til en ny destinasjon. I motsetning til Files.copy-metoden nedenfor, kan du bruke denne metoden for alle Java-versjoner, inkludert Java 6 og tidligere.
Den bruker FileInputStream-klassen til å lese byte fra en kildefil, og FileOutputStream til å skrive byte til destinasjonen.
- Lag en fil hvor som helst på datamaskinen din kalt "SimpleScript.java".
- Åpne filen i et tekstredigeringsprogram eller IDE, og kopier følgende basiskode til applikasjonen.
import java.io. IOException;
klasseSimpleScript{
offentligstatisktomromhoved-(String args[])kaster IOException {
// Koden din her
}
} - Importer disse ekstra Input Stream- og Output Stream-klassene øverst i filen, like etter den første importsetningen.
import java.io. Fil;
import java.io. InputStream;
import java.io. OutputStream;
import java.io. FileInputStream;
import java.io. FileOutputStream; - Opprett en ny fil kalt "Copy-File-1.txt", i samme mappe som SimpleScript.java-filen. Legg til alt skrevet innhold i filen.
- I samme mappe oppretter du også en ny katalog kalt "Destinasjon". Målet er å kopiere "Copy-File-1.txt"-filen til den nye mappen.
- Inne i hovedfunksjonen til klassen, bruk File-klassen til å lage to nye filobjekter. Kilden, som vil være filen du vil kopiere, og destinasjonen, som vil være der du vil kopiere filen til. Hvis målfilen ikke eksisterer, vil programmet opprette en ny.
klasseSimpleScript{
offentligstatisktomromhoved-(String args[])kaster IOException {
// Første måte å kopiere en fil
Filkilde = ny Fil("Kopier-Fil-1.tekst");
Filmål = ny Fil("Destinasjon/Kopi-fil-1.tekst");
}
} - Deretter oppretter du et InputStream- og OutputStream-objekt.
InputStream input = null;
OutputStream output = null; - Bruk inngangsstrømmen til å lese dataene i byte, og utdatastrømmen til å skrive dataene til den nye plasseringen.
prøve {
// Lag FileInputStream- og FileOutputStream-objekter
input = ny FileInputStream (kilde);
utgang = ny FileOutputStream (destinasjon);
byte[] buf = nybyte[1024];
int bytesLes;// Skriv byte til destinasjonen
samtidig som ((bytesRead = input.read (buf)) > 0) {
output.write (buf, 0, bytesLes);
}
} å fange (IOException e) {
e.printStackTrace();
System.out.println("Kunne ikke kopiere filen til destinasjonen: " + destination.getPath() + ". Kryss av hvis mappen eller filen eksisterer allerede.");
} til slutt {
// Lukk bekkene
hvis (inngang != null) {
input.close();
}hvis (utgang != null) {
output.close();
}
}System.out.println("Fil kopiert");
- For å kjøre skriptet, åpne en kommandolinje. Naviger til mappen der du lagret Java-filen din ved å bruke cd-kommandoen på Windows ledetekst eller Mac-terminalen.
cd Skrivebord
- For å kompilere skriptet, lagre Java-filen og kjør Javac kommando på kommandolinjen:
javac SimpleScript.java
- For å kjøre skriptet, bruk Java kommando:
Du bør se en enkelt linje med utdata uten feil:java SimpleScript
- Naviger til mappen "Destinasjon" for å se den kopierte filen.
- Åpne filen for å se innholdet som programmet kopierte fra originalfilen.
Hvordan kopiere filer ved hjelp av Files.copy
Hvis du bruker Java 7 eller nyere, kan du bruke Files.copy-metoden. Denne metoden er generelt en enklere implementering. Ifølge Java-dokumentasjon, er det flere overbelastninger for funksjonen.
Files.copy-metoden kan for eksempel også bruke en inndatastrøm for å kopiere filer fra ett sted til et annet, men gjennom en metode som bruker mindre kode. Du kan også bruke Paths, eller spesifisere selv hvordan du vil at metoden skal kopiere filen din.
- Opprett en ny fil kalt "Copy-File-2.txt", i samme mappe som SimpleScript.java-filen. Legg til alt skrevet innhold i filen.
- Øverst i filen legger du til importer for "java.nio.file. Paths" og "java.nio.file. Files"-klasser.
import java.nio.fil. stier;
import java.nio.fil. filer; - Legg til to strenger som representerer den relative filbanen for kildefilen og destinasjonen. Bruk Files.copy-metoden, som allerede vil håndtere logikken for å kopiere filen til destinasjonen.
String copySource = "Kopier-fil-2.tekst";
String copyDestination = "Destination/Copy-File-2.tekst";prøve {
Files.copy (Paths.get (copySource), Paths.get (copyDestination));
} å fange (Unntak e) {
System.out.println("Kunne ikke kopiere filen til destinasjonen: " + copyDestination + ". Kryss av hvis mappen eller filen eksisterer allerede.");
}
System.out.println("2nd Fil kopiert"); - Kjør skriptet ved å bruke Java- og Java-kommandoene.
- Naviger til mappen "Destinasjon" for å se den kopierte filen.
Hvordan kopiere filer ved hjelp av FileChannel.transferTo()
Ifølge Java-dokumentasjon, kan denne metoden være en potensielt raskere måte å kopiere filer på. Dette vil imidlertid avhenge av måten du implementerer funksjonen på.
- Opprett en ny fil kalt "Copy-File-3.txt", i samme mappe som SimpleScript.java-filen. Legg til noe eksempelinnhold i denne filen.
- På toppen av SimpleScript.java, importer "java.nio.channels. FileChannel"-klassen sammen med tre av de tidligere vanlige filrelaterte klassene fra io-pakken.
import java.io. Fil;
import java.io. FileInputStream;
import java.io. FileOutputStream;
import java.nio.kanaler. FileChannel; - Lag filobjekter for kilden og destinasjonen, og bruk dem til å lage en inngangsstrøm og en utgangsstrøm.
Fil src = ny Fil("Kopier-Fil-3.tekst");
Fil dst = ny Fil("Destinasjon/Kopi-fil-3.tekst");
FileInputStream inStream = ny FileInputStream (src);
FileOutputStream outStream = ny FileOutputStream (dst); - Bruk TransferTo-metoden fra FileChannel-klassen for å kopiere filen til målet.
prøve {
FileChannel inChannel = inStream.getChannel();
FileChannel outChannel = outStream.getChannel();
inChannel.transferTo(0, inChannel.size(), outChannel);
} å fange (Unntak e) {
System.out.println("Kunne ikke kopiere filen til destinasjonen: " + dst.getPath() + ". Kryss av hvis mappen eller filen eksisterer allerede.");
} til slutt {
// Lukk bekkene
inStream.close();
outStream.close();
}
System.out.println("3rd Fil kopiert"); - Kjør skriptet ved å bruke Java- og Java-kommandoene.
- Naviger til mappen "Destinasjon" for å se den kopierte filen.
Kopiering av filer i Java er bare starten
Det er mange måter du kan kopiere en fil på i Java. Tre mulige måter inkluderer bruk av den tradisjonelle stream-metoden, Files.copy-metoden eller transferTo-metoden.
Det er mange andre filbehandlingsoperasjoner du kan utføre med Java. Noen av disse inkluderer flytting av filer, sletting av filer eller zipping av filer. Disse kan være nyttige å lære om du trenger å automatisere visse prosesser i filbehandleren.