Javine I/O biblioteke za kopiranje datoteka
Java standardna biblioteka pruža nam više opcija za efikasno kopiranje datoteka. U ovom kontekstu ćemo raspravljati o dvije glavne biblioteke: java.nio i java.io.
Biblioteka java.nio je dio novih I/O API-ja predstavljenih u Javi 1.4. Od tada je postao preferirani izbor za mnoge programere jer nudi I/O operacije visokih performansi bez blokiranja, poboljšan pristup sistemu datoteka i štedljiviji način rada sa datotekama. Specifične klase sa kojima ćemo raditi su java.nio.file.Files i java.nio.file.Path.
java.io biblioteka, s druge strane, dio je Jave od njenog nastanka. Iako njegove I/O operacije imaju tendenciju da budu manje učinkovite od onih u nio paketu, on ostaje valjana opcija kada se radi s datotekama. Za ovaj vodič fokusirat ćemo se na korištenje klasa InputStreamReader, OutputStreamWriter, BufferedReader i BufferedWriter.
Rješenje za kopiranje datoteka u Javi
Da bismo demonstrirali jednostavno rješenje za kopiranje datoteka u Javi, koristit ćemo biblioteku java.nio.
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class FileCopy {
public static void main(String[] args) throws IOException {
Path source = Paths.get("source.txt");
Path destination = Paths.get("destination.txt");
Files.copy(source, destination);
}
}
U ovom uzorku koda prvo uvozimo potrebne klase iz paketa java.nio. Zatim kreiramo objekt Putanja i za izvorne i za odredišne datoteke. Stvarno kopiranje fajla se izvršava metodom Files.copy(). Poziv metode uzima izvorne i odredišne objekte Putanja kao argumente i upravlja operacijom kopiranja.
Korak po korak objašnjenje koda
1. Uvezite potrebne klase: Kao prvi korak, uvozimo potrebne klase iz java.nio biblioteke (fajlovi, putanje i putanja).
2. Navedite izvorne i odredišne datoteke: Koristeći metodu Paths.get(), kreiramo Path objekte koji predstavljaju naše izvorne i odredišne datoteke. Ovi objekti služe kao referentne tačke za proces kopiranja datoteke.
3. Izvršite operaciju kopiranja datoteke: Pozivamo Files.copy() metodu da izvršimo stvarno kopiranje datoteke. Ova metoda uzima dva objekta Path kao argumente, koji predstavljaju izvorne i odredišne datoteke. Podaci iz izvorne datoteke se zatim prenose u odredišnu datoteku.
Rukovanje izuzecima i prepisivanje
Međutim, kod koji smo prikazali je prilično jednostavan i možda neće biti dovoljan u stvarnom svijetu bez dodatne konfiguracije. Na primjer, metoda Files.copy() može baciti FileAlreadyExistsException ako odredišna datoteka već postoji. Da bismo izbjegli takve probleme, možemo koristiti klasu java.nio.file.StandardCopyOption. Ova klasa pruža enume poput REPLACE_EXISTING ili COPY_ATTRIBUTES koji nam daju bolju kontrolu nad operacijom kopiranja.
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
public class FileCopy {
public static void main(String[] args) throws IOException {
Path source = Paths.get("source.txt");
Path destination = Paths.get("destination.txt");
Files.copy(source, destination, StandardCopyOption.REPLACE_EXISTING);
}
}
Dodavanjem enuma StandardCopyOption.REPLACE_EXISTING u naš poziv metode Files.copy(), osiguravamo da će postojeća odredišna datoteka, ako postoji, biti prepisana. Ovo sprečava izbacivanje izuzetka FileAlreadyExistsException.
U zaključku, Javine standardne biblioteke olakšavaju kopiranje datoteka, rukovanje izuzecima i kontrolu ponašanja operacija datoteka. Bilo da odaberete da koristite java.nio ili java.io biblioteku, obje imaju svoje prednosti i primjenu u različitim scenarijima.