I/O knihovny Java pro kopírování souborů
Standardní knihovna Java nám poskytuje několik možností, jak efektivně kopírovat soubory. V této souvislosti probereme dvě hlavní knihovny: java.nio a java.io.
Knihovna java.nio je součástí nových I/O API představených v Javě 1.4. Od té doby se stal preferovanou volbou mnoha vývojářů, protože nabízí vysoce výkonné neblokující I/O operace, vylepšený přístup k souborovému systému a štíhlejší způsob práce se soubory. Konkrétní třídy, se kterými budeme pracovat, jsou java.nio.file.Files a java.nio.file.Path.
Knihovna java.io, na druhou stranu je součástí Javy již od jejího vzniku. Zatímco jeho I/O operace bývají méně výkonné než ty v balíčku nio, zůstává platnou volbou při práci se soubory. V tomto tutoriálu se zaměříme na používání tříd InputStreamReader, OutputStreamWriter, BufferedReader a BufferedWriter.
Řešení pro kopírování souborů v Javě
K demonstraci jednoduchého řešení kopírování souborů v Javě použijeme knihovnu 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); } }
V tomto ukázkovém kódu nejprve importujeme potřebné třídy z balíčku java.nio. Poté vytvoříme objekt Path pro zdrojový i cílový soubor. Vlastní kopírování souboru se provádí pomocí metody Files.copy(). Volání metody bere zdrojové a cílové objekty Path jako argumenty a zpracovává operaci kopírování.
Vysvětlení kódu krok za krokem
1. Importujte požadované třídy: Jako první krok naimportujeme potřebné třídy z knihovny java.nio (Files, Paths a Path).
2. Zadejte zdrojové a cílové soubory: Pomocí metody Paths.get() vytváříme objekty Path představující naše zdrojové a cílové soubory. Tyto objekty slouží jako referenční body pro proces kopírování souborů.
3. Proveďte operaci kopírování souboru: Zavoláme metodu Files.copy() k provedení skutečného kopírování souboru. Tato metoda bere dva objekty Path jako argumenty, které představují zdrojové a cílové soubory. Data ve zdrojovém souboru se poté přenesou do cílového souboru.
Zpracování výjimek a přepisování
Kód, který jsme ukázali, je však zcela základní a ve scénářích reálného světa nemusí stačit bez další konfigurace. Například metoda Files.copy() může vyvolat výjimku FileAlreadyExistsException, pokud cílový soubor již existuje. Abychom se těmto problémům vyhnuli, můžeme použít třídu java.nio.file.StandardCopyOption. Tato třída poskytuje výčty jako REPLACE_EXISTING nebo COPY_ATTRIBUTES, které nám poskytují lepší kontrolu nad operací kopírování.
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); } }
Přidáním výčtu StandardCopyOption.REPLACE_EXISTING do našeho volání metody Files.copy() zajistíme, že existující cílový soubor, pokud existuje, bude přepsán. To zabrání vyvolání výjimky FileAlreadyExistsException.
Závěrem lze říci, že standardní knihovny Java usnadňují kopírování souborů, zpracování výjimek a řízení chování operací se soubory. Ať už se rozhodnete použít knihovnu java.nio nebo java.io, obě mají své silné stránky a aplikace v různých scénářích.