Cách nhanh nhất để sao chép một số lượng lớn tệp trong Java là gì. Cho đến nay tôi đã sử dụng các luồng tệp và nio. Các luồng tổng thể dường như nhanh hơn nio. Bạn đã làm gì cho đến nay?Cách nhanh nhất để sao chép các tệp trong Java
Trả lời
http://www.baptiste-wicht.com/2010/08/file-copy-in-java-benchmark/ có thể giúp bạn có được câu trả lời của bạn.
Đối với điểm chuẩn, tôi đã thực hiện các thử nghiệm bằng cách sử dụng các tệp khác nhau.
- nhỏ tập tin (5 KB)
- tập trung (50 KB)
- Big tập tin (5 MB)
- tập tin Fat (50 MB)
- Và một tập tin rất lớn (1,3 GB) chỉ nhị phân
Và trước tiên tôi đã thực hiện các thử nghiệm bằng cách sử dụng tệp văn bản và sau đó sử dụng tệp nhị phân. Tôi đã thực hiện các thử nghiệm bằng ba chế độ:
- Trên cùng một đĩa cứng. Đó là một đĩa cứng IDE có dung lượng 250 GB với bộ nhớ cache 8 MB. Nó được định dạng trong Ext4.
- Giữa hai đĩa. Tôi đã sử dụng đĩa đầu tiên và một đĩa cứng SATA khác có dung lượng 250 GB với bộ nhớ cache 16 MB. Nó được định dạng trong Ext4.
- Giữa hai đĩa. Tôi đã sử dụng đĩa đầu tiên và một đĩa cứng SATA khác có dung lượng 1 TB với bộ nhớ cache 32 MB. Nó được định dạng bằng NTFS.
Tôi đã sử dụng khung chuẩn, described here, để thực hiện kiểm tra tất cả các phương pháp. Các bài kiểm tra đã được thực hiện trên máy tính cá nhân của tôi (Ubuntu 10.04 64 bit, Intel Core 2 Duo 3.16 GHz, 6 Go DDR2, SATA Hard Disk). Phiên bản Java sử dụng là một Java 7 64 bit Virtual Machine ...
cảm ơn, câu trả lời này cho câu hỏi của tôi – Mato
Có ngã ba java trên tập lệnh batch của hệ điều hành sao chép tệp. Mã của bạn có thể phải viết tập lệnh batch.
Đã nghĩ về điều đó nhưng việc xử lý lỗi sẽ khó khăn khi sao chép 10.000 tệp và chi phí sinh sản của một luồng hệ thống khi sao chép các tệp nhỏ là lớn. Hơn nữa các ứng dụng sẽ không được nền tảng độc lập. – Mato
1. Bạn sẽ phải xử lý việc kiểm tra lỗi. 2. Bạn chính xác ở chỗ nó sẽ không được nền tảng độc lập - vì vậy bạn có ý định chạy trên các máy chủ của các loại khác nhau? 3. Bạn có thể tạo 10.000 tệp ở vị trí 'thích hợp' để bắt đầu và không cần một bản sao nào cả? 4. Không sinh ra một luồng cho mỗi tập tin. Một chủ đề cho mỗi 100 tệp hoặc một cái gì đó. –
Tôi đồng ý với điều này. Sao chép các tập tin câm không phải là một trường hợp sử dụng lý tưởng của Java. Nếu bạn muốn làm điều đó từ Java, sau đó ngã ba tắt một cuộc gọi cấp hệ điều hành. – bwawok
Tôi sẽ sử dụng:
import java.io.*;
import java.nio.channels.*;
public class FileUtils{
public static void copyFile(File in, File out)
throws IOException
{
FileChannel inChannel = new
FileInputStream(in).getChannel();
FileChannel outChannel = new
FileOutputStream(out).getChannel();
try {
inChannel.transferTo(0, inChannel.size(),
outChannel);
}
catch (IOException e) {
throw e;
}
finally {
if (inChannel != null) inChannel.close();
if (outChannel != null) outChannel.close();
}
}
public static void main(String args[]) throws IOException{
FileUtils.copyFile(new File(args[0]),new File(args[1]));
}
}
Nếu bất kỳ tập tin của bạn là lớn hơn 64M trong Windows bạn có thể cần phải xem xét điều này: http://forums.sun.com/thread.jspa?threadID=439695&messageID=2917510
bắt (IOException e) { ném e; } <--- nice one – unbeli
Đó chỉ là mã mẫu. –
Cảm ơn điều này nhanh hơn rất nhiều so với những gì tôi đang sử dụng! –
Bạn có thể sử dụng hoặc thực hiện FileUtils của commons-io apache thư viện để sao chép tập tin
FileUtils.copyFile(new File(sourcePath), new File(destPath));
Trong đó sử dụng FileChannel cho IO hoạt động.
Hoặc sử dụng phương pháp java.nio.file.Files
's copy()
.
- 1. Cách nhanh nhất để sao chép một bảng trong mysql?
- 2. Cách nhanh nhất để sao chép một GregorianCalendar?
- 3. Sao chép tệp nhanh Delphi
- 4. Kịch bản lệnh "Sao chép nhanh nhất" nhanh nhất
- 5. cách nhanh để sao chép định dạng trong excel
- 6. Cách di chuyển nhanh nhất để sao chép một mảng trong C++
- 7. Cách nhanh nhất để đọc các tệp byte tương đối lớn trong Java
- 8. Cách sao chép dữ liệu nhanh nhất/tốt nhất giữa S3 đến EC2?
- 9. Cách nhanh nhất để truy vấn xml trong java
- 10. Cách thông thường để sao chép tệp trong Gradle - sử dụng Sao chép tác vụ hoặc phương pháp sao chép?
- 11. Java, lớp nhanh nhất để đọc từ một tệp txt
- 12. Cách sao chép tệp .xib?
- 13. Có cách nào nhanh hơn để sao chép tệp không phải là File.Copy
- 14. Cách sao chép tệp trong C#
- 15. Thao tác Di chuyển/Sao chép Tệp trong Java
- 16. SQL 2005 - cách nhanh chóng để sao chép nhanh một cơ sở dữ liệu + dữ liệu
- 17. Cách nhanh nhất để nhập tệp CSV trong MATLAB
- 18. Cách nhanh nhất để tạo tệp trong C#
- 19. Cách nhanh nhất để nhập hàng triệu tệp trong R?
- 20. Cách nhanh nhất để tạo tổng kiểm tra các tệp lớn trong C#
- 21. Cách nhanh nhất để ghi dữ liệu lớn trong tệp văn bản Java
- 22. Cách dễ nhất để sao chép/sao chép một cá thể tài liệu mongoose?
- 23. Whats cách tốt nhất để sao chép/sao chép dự án thành một mới với git?
- 24. Cách sao chép hoặc sao chép một mảng các mảng
- 25. FSEvents và sao chép các tệp lớn
- 26. Cách tốt nhất để sao chép ứng dụng Java trên Linux
- 27. Cách đơn giản nhất để sao chép int thành byte []
- 28. DataFlavor yêu cầu để sao chép tệp trong Mac OSX
- 29. Java: cách hiệu quả nhất để phòng thủ sao chép một int []?
- 30. Cách nhanh nhất để đọc chiều dài tệp C#
Bạn đang thực hiện một số loại chuyển đổi trên các tệp khi bạn sao chép chúng? Tại sao không chỉ sử dụng các chức năng hệ thống tập tin của hệ điều hành? –
Không, tôi không thực hiện bất kỳ phép chuyển đổi nào. Nhưng việc xử lý lỗi sẽ khó khăn hơn nhiều khi sao chép hơn 10,000 tệp và chi phí tạo ra một chuỗi hệ thống khi sao chép các tệp nhỏ là lớn. – Mato
Tôi khuyên bạn nên sửa đổi câu hỏi của mình để bao gồm các ràng buộc mà chúng tôi đã phát hiện ra. –