2012-07-22 24 views
5

Tôi đang sử dụng JCIFS trong dự án Android mới của mình. Bằng cách nào đó tôi đã quyết định sử dụng lớp URL để tổng quát đường dẫn tệp (vì vậy tôi có thể thêm giao thức sau). Những gì tôi đã làm là như bên dướiSử dụng giao thức SMB trong URL trong khi sử dụng thư viện JCIFS trên Android

URL url = new URL("smb://192.168.1.1/filepath"); 

Và sau đó là java.net.MalformedURLViệc ngoại lệ ngoại lệ được ném.

Exception in thread "main" java.net.MalformedURLException: unknown protocol: smb 
    at java.net.URL.<init>(URL.java:184) 
    at java.net.URL.<init>(URL.java:127) 

Tư vấn JCIFS FAQ cho biết rằng tôi phải đăng ký giao thức trước khi sử dụng lớp học. Tuy nhiên tôi không thực sự biết làm thế nào để làm như vậy trong Android. Tôi nghĩ thư viện đã làm điều này rồi, nhưng nó không có trên Android.

Vì vậy, tôi nên làm gì?

+0

Bạn đã đặt tệp Jar jcifs ở đâu? Nó phải ở trong classpath thích hợp để Handler được nạp. – medopal

+0

Tôi đặt tệp jar trong thư mục/libs của dự án, mà tôi nghĩ rằng nó không có trong classpath. Và tôi nghĩ Android xử lý đường dẫn lớp khác với ứng dụng Java thông thường. –

Trả lời

0

Không sử dụng đối tượng URL. Chuyển URL trực tiếp vào hàm tạo SmbFile. Ví dụ:

SmbFile file = new SmbFile("smb://192.168.1.1/filepath"); 

Sau đó, bạn có thể làm hầu hết mọi thứ bạn có thể làm với Tệp thông thường.

+0

Lý do tôi sử dụng đối tượng URL là tôi muốn hỗ trợ giao thức khác (và hệ thống tệp cục bộ). Sử dụng URL có thể làm cho nó trở nên trừu tượng hơn trong giao thức. Ngoài ra tôi muốn sử dụng đối tượng Serilizable để truyền giữa các hoạt động, mà SmbFile thì không. –

+0

Nghe hay đấy, tôi rất vui vì bạn đã tìm ra! – 11101101b

5

Tôi vừa xem cách sử dụng trong tham chiếu JCIFS, trong tham chiếu SmbFile.

Khi sử dụng lớp java.net.URL với URL 'smb: //' cần thiết để trước hết gọi là jcifs.Config.registerSmbURLHandler(); phương pháp. Điều này là bắt buộc để đăng ký trình xử lý giao thức SMB.

Vì vậy, tôi thêm cuộc gọi này và cuộc gọi này hoạt động bình thường.

+0

Javadoc: [http://stderr.org/doc/libjcifs-java-doc/api/jcifs/Config.html#registerSmbURLHandler()](http://stderr.org/doc/libjcifs-java-doc/api /jcifs/Config.html#registerSmbURLHandler()) –

+0

Liên kết trước không khả dụng, hãy sử dụng https://jcifs.samba.org/src/docs/api/jcifs/Config.html#registerSmbURLHandler%28%29 thay thế – jneira