Có ai có thể giúp tôi sao chép tệp từ thư mục được chia sẻ sang ổ đĩa cục bộ không? Mã của tôi là:Làm thế nào để sao chép tệp từ chia sẻ smb sang ổ đĩa cục bộ bằng cách sử dụng jcif trong Java?
import jcifs.smb.NtlmPasswordAuthentication;
import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileInputStream;
import jcifs.smb.SmbFileOutputStream;;
public class smb {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
String urlToBackUpFile = "smb://ip/backup$/test.txt";
System.out.println("smb folder of source file" + urlToBackUpFile);
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(null, "login", "pass");
SmbFile dir = new SmbFile(urlToBackUpFile, auth);
System.out.println(dir.getDate());
SmbFile dest = new SmbFile ("C:/SQLRESTORESTAGE/v2.bak");
dir.copyTo(dest);
}
}
Tệp tệp không được sao chép. Tôi đã nhận được thông báo "Không thể kết nối với máy chủ", nhưng chương trình hiển thị dir.getDate() (và tên tệp và chiều dài) của tệp nguồn. Vì vậy, tôi nghĩ rằng vấn đề với thư mục đích (C:/SQLRESTORESTAGE /). Ngoài ra tôi có những lời khiêu khích chỉ để đọc tệp nguồn. Bạn có thể giúp tôi cirrect mã hoặc tư vấn cho một cái gì đó? Cảm ơn bạn.
Chỉ cần một lưu ý nhỏ, tốt hơn là đóng các luồng của bạn trong một khối cuối cùng. – PomCompot
Để thêm vào nhận xét của @PomCompot, tôi cũng khuyên bạn nên sử dụng Apache Commons IO và sử dụng 'IOUtils.closeQuietly (Closeable c)' để đóng các luồng của bạn trong khối 'finally'. Nó lặng lẽ bỏ qua bất kỳ trường hợp ngoại lệ nào được nêu ra bằng cách gọi 'close()' trên luồng, vì vậy hãy chú ý đến cảnh báo đó, mặc dù tôi vẫn chưa thấy nó là một vấn đề. – Will
Mã trên được làm việc cho tôi Cảm ơn. –