Hãy thử một trong những phương pháp sau để sao chép tệp bằng Java, nhưng hãy nhớ hiểu cách nào là tốt nhất cho nhu cầu của bạn.
Một số trường hợp yêu cầu bạn sao chép tệp bằng Java. Bạn có thể đang tạo một tập lệnh đơn giản để tự động hóa các quy trình cho trình quản lý tệp. Bạn thậm chí có thể đang viết một ứng dụng toàn diện hoạt động với các tệp.
Có nhiều cách để bạn có thể sao chép tệp, tùy thuộc vào hiệu suất yêu cầu, tính đơn giản của bạn hoặc thậm chí phiên bản Java bạn đang sử dụng.
Cách sao chép tệp bằng FileInputStream và FileOutputStream
Phương pháp này hoạt động bằng cách đọc thủ công từng byte dữ liệu từ tệp và ghi nó vào một đích mới. Không giống như phương pháp Files.copy bên dưới, bạn có thể sử dụng phương pháp này cho tất cả các phiên bản Java, bao gồm cả Java 6 trở về trước.
Nó sử dụng lớp FileInputStream để đọc byte từ tệp nguồn và FileOutputStream để ghi byte vào đích.
- Tạo một tệp ở bất kỳ đâu trên máy tính của bạn có tên “SimpleScript.java”.
- Mở tệp trong trình soạn thảo văn bản hoặc IDE và sao chép mã cơ sở sau vào ứng dụng.
import java.io.IOException;
class SimpleScript {
public static void main(String args[]) throws IOException {
}
} - Nhập các lớp Dòng Đầu vào và Dòng Đầu ra bổ sung này ở đầu tệp, ngay sau câu lệnh nhập đầu tiên.
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream; - Tạo một tệp mới có tên “Copy-File-1.txt”, trong cùng thư mục với tệp SimpleScript.java của bạn. Thêm bất kỳ nội dung bằng văn bản nào bên trong tệp.
- Trong cùng một thư mục, cũng tạo một thư mục mới có tên là “Đích”. Mục đích là sao chép tệp “Copy-File-1.txt” vào thư mục mới.
- Bên trong chức năng chính của lớp, sử dụng lớp Tệp để tạo hai đối tượng tệp mới. Nguồn, sẽ là tệp bạn muốn sao chép và đích, sẽ là nơi bạn muốn sao chép tệp vào. Nếu tệp đích không tồn tại, chương trình của bạn sẽ tạo một tệp mới.
class SimpleScript {
public static void main(String args[]) throws IOException {
File source = new File("Copy-File-1.txt");
File destination = new File("Destination/Copy-File-1.txt");
}
} - Sau đó, tạo một đối tượng InputStream và OutputStream.
InputStream input = null;
OutputStream output = null; - Sử dụng luồng đầu vào để đọc dữ liệu theo byte và luồng đầu ra để ghi dữ liệu vào vị trí mới.
try {
input = new FileInputStream(source);
output = new FileOutputStream(destination);
byte[] buf = new byte[1024];
int bytesRead;
while ((bytesRead = input.read(buf)) > 0) {
output.write(buf, 0, bytesRead);
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("Could not copy the file to the destination: " + destination.getPath() + ". Check if the folder or file already exists.");
} finally {
if (input != null) {
input.close();
}
if (output != null) {
output.close();
}
}
System.out.println("File copied"); - Để chạy tập lệnh, hãy mở một dòng lệnh. Điều hướng đến thư mục nơi bạn đã lưu trữ tệp Java của mình bằng lệnh cd trên Windows Command Prompt hoặc Mac Terminal.
cd Desktop
- Để biên dịch tập lệnh, hãy lưu tệp Java và chạy Javac lệnh trong dòng lệnh:
javac SimpleScript.java
- Để chạy tập lệnh, hãy sử dụng Java yêu cầu:
java SimpleScript
Bạn sẽ thấy một dòng đầu ra không có lỗi:
- Điều hướng đến thư mục “Đích” của bạn để xem tệp đã sao chép của bạn.
- Mở tệp để xem nội dung mà chương trình của bạn đã sao chép từ tệp gốc.
Cách sao chép tệp bằng Files.copy
Nếu bạn đang sử dụng Java 7 trở lên, bạn có thể sử dụng phương pháp Files.copy. Phương pháp này nói chung là một cách thực hiện đơn giản hơn. Theo Tài liệu Java, có nhiều lần quá tải cho hàm.
Ví dụ: phương thức Files.copy cũng có thể sử dụng luồng đầu vào để sao chép tệp từ vị trí này sang vị trí khác, nhưng thông qua một phương pháp sử dụng ít mã hơn. Bạn cũng có thể sử dụng Đường dẫn hoặc tự chỉ định cách bạn muốn phương pháp sao chép tệp của mình.
- Tạo một tệp mới có tên “Copy-File-2.txt”, trong cùng thư mục với tệp SimpleScript.java của bạn. Thêm bất kỳ nội dung bằng văn bản nào bên trong tệp.
- Ở đầu tệp, thêm nhập cho các lớp “java.nio.file.Paths” và “java.nio.file.Files”.
import java.nio.file.Paths;
import java.nio.file.Files; - Thêm hai chuỗi, đại diện cho đường dẫn tệp tương đối cho tệp nguồn và đích. Sử dụng phương thức Files.copy, phương thức này sẽ xử lý logic để sao chép tệp đến đích.
String copySource = "Copy-File-2.txt";
String copyDestination = "Destination/Copy-File-2.txt";
try {
Files.copy(Paths.get(copySource), Paths.get(copyDestination));
} catch (Exception e) {
System.out.println("Could not copy the file to the destination: " + copyDestination + ". Check if the folder or file already exists.");
}
System.out.println("2nd File copied"); - Chạy tập lệnh bằng các lệnh Javac và Java.
- Điều hướng đến thư mục “Đích” của bạn để xem tệp đã sao chép của bạn.
Cách sao chép tệp bằng FileChannel.transferTo ()
Theo Tài liệu Java, phương pháp này có thể là một cách có thể nhanh hơn để sao chép tệp. Tuy nhiên, điều này sẽ phụ thuộc vào cách bạn triển khai chức năng.
- Tạo một tệp mới có tên “Copy-File-3.txt”, trong cùng thư mục với tệp SimpleScript.java của bạn. Thêm một số nội dung mẫu vào tệp này.
- Ở đầu SimpleScript.java, nhập lớp “java.nio.channels.FileChannel” cùng với ba trong số các lớp liên quan đến tệp phổ biến trước đó từ gói io.
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.channels.FileChannel; - Tạo các đối tượng tệp cho nguồn và đích, đồng thời sử dụng các đối tượng đó để tạo Luồng đầu vào và Luồng đầu ra.
File src = new File("Copy-File-3.txt");
File dst = new File("Destination/Copy-File-3.txt");
FileInputStream inStream = new FileInputStream(src);
FileOutputStream outStream = new FileOutputStream(dst); - Sử dụng phương thức TransferTo từ lớp FileChannel để sao chép tệp đến đích của nó.
try {
FileChannel inChannel = inStream.getChannel();
FileChannel outChannel = outStream.getChannel();
inChannel.transferTo(0, inChannel.size(), outChannel);
} catch (Exception e) {
System.out.println("Could not copy the file to the destination: " + dst.getPath() + ". Check if the folder or file already exists.");
} finally {
inStream.close();
outStream.close();
}
System.out.println("3rd File copied"); - Chạy tập lệnh bằng các lệnh Javac và Java.
- Điều hướng đến thư mục “Đích” của bạn để xem tệp đã sao chép của bạn.
Sao chép tệp trong Java chỉ là bước khởi đầu
Có nhiều cách để bạn có thể sao chép một tệp trong Java. Ba cách có thể thực hiện bao gồm sử dụng phương pháp luồng truyền thống, phương pháp Files.copy hoặc phương thức transferTo.
Có nhiều hoạt động quản lý tệp khác mà bạn có thể thực hiện bằng Java. Một số trong số này bao gồm di chuyển tệp, xóa tệp hoặc nén tệp. Những điều này có thể hữu ích để tìm hiểu nếu bạn cần tự động hóa các quy trình nhất định trong trình quản lý tệp.