2010-09-30 35 views
8

Câu chuyện đằng sau ...Khám phá USB thiết bị Mass Storage với Java

Tôi thực sự thích chương trình truyền hình nhưng tôi quay trở lại ngôi nhà duy nhất hai lần một tháng. Phần còn lại của thời gian tôi sống trong một ngôi nhà mà không có internet (gần trường đại học của tôi, vì vậy miễn phí wifi đá! - khi nó hoạt động -) vì vậy tôi cần một phần mềm nhỏ có thể cập nhật đĩa cứng di động của tôi với các chương trình mới của tôi khi tôi trở về nhà, nơi máy chủ tập tin được đồng bộ hóa với podcast thực hiện công việc của nó. Tôi đã làm nó bằng cách sử dụng Java và nó hoạt động.

Vấn đề

Ngay bây giờ tôi có một .properties tập tin mà tôi được lưu trữ trong thư mục gắn kết đó usb hd. Không đủ. Tôi muốn phần mềm có thể khám phá tất cả các thiết bị lưu trữ USB và cho phép người dùng chọn thiết bị nào sử dụng để lưu trữ tệp. Làm thế nào tôi có thể làm điều đó?

Chi tiết

a) nó có được trong Java (Ý tôi là, Nó cũng có thể làm việc với thực hiện lệnh máy chủ địa phương như dir hoặc một cái gì đó như thế)

b) máy chủ của tôi là trên cửa sổ, nhưng tôi thích nó là giải pháp độc lập của hệ điều hành

+0

Tôi không chắc liệu Java có được phép truy cập vào các chi tiết FS như vậy hay không - nó đủ phức tạp trong mã gốc =/Tôi cũng muốn biết, vì vậy hãy xem liệu có ai đó biết không. – Piskvor

+0

Vâng, tôi biết chắc chắn trong C# bạn có 'System.IO.DriveInfo'. Tôi hy vọng có cái gì đó tương tự với Java. – dierre

+0

a) nó có phải là Java không? b) hệ điều hành nào? –

Trả lời

3

Mặc dù tôi không thấy nó trong câu hỏi của bạn, tôi cho rằng bạn rất quen thuộc với phương thức File.listRoots(), trả về một mảng gốc tập tin tốt .

Sau đó, bạn chỉ có thể lặp lại chúng và cố gắng xác định xem chúng có phải là ổ đĩa flash hay không. Một số lỗi có thể là:

File[] roots = File.listRoots(); 

if (roots == null) { 
    // you have a different problem here. Is it even a computer we are talking about? 
} 

// Iterate through roots 
for (File root : roots) { 
    if (root.canWrite()) { // Or, you could use File.createTempfile with that folder 
     // if root does not contain some well know files 
     // Or, if root contains some well known files 
     // Based on these 2 hacks, or possible other characteristics, you may be reasonably sure 
    } 
} 

Đó là tất cả những gì tôi có thể cung cấp. Nhiều hơn nữa có thể được thực hiện với nhiều chương trình bản địa hơn, và sau đó gọi chúng từ chương trình Java.

+0

Ok, tôi cho rằng bạn đang đề xuất tôi nên tạo điều kiện để kiểm tra xem đó có phải là thiết bị đã biết hay không. ví dụ: nếu thư mục gốc của tôi chứa thư mục 'Tài liệu và Cài đặt' thì tôi đang ở trên cửa sổ xp. Đúng? – dierre

+0

Vâng, để tìm ra hệ điều hành là thẳng hơn về phía trước (System.getProperty ("os.name") vv). Tôi đã đề cập đến phân biệt ổ đĩa cứng bên ngoài từ các ổ đĩa khác có thể (phân vùng đĩa cứng, iPod, CD, DVD, vv). –

+0

Vâng, tôi phải thích đề xuất của bạn. Tôi đã sử dụng listRoots cho windows và JNI cho linux với mount. – dierre

2

Bạn có thể kiểm tra dự án javax.usb. Hiện tại có hai triển khai được chứng nhận, cho Linux và BSD và implementation for windows (vì có vẻ như nó vẫn chưa hoàn chỉnh, nhưng tôi cho phép nó liệt kê các thiết bị USB được kết nối).

Nhưng tôi không chắc chắn nếu posibility niêm yết chỉ ổ đĩa USB (thay vì tất cả các ổ đĩa như trong @Amrinder Arora câu trả lời) giá trị thông qua một bộ thư viện mới và phải vật lộn với việc thực hiện bán hoàn chỉnh ...

1

Một đẹp cách đã được cung cấp trong nio. Kiểm tra điều này:

import java.nio.file.*; 
for(Path p:FileSystems.getDefault().getRootDirectories()){ 
    System.out.println(p); 
} 

Bạn sẽ nhận được Tất cả gốc là đối tượng đường dẫn;

Các vấn đề liên quan