熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

JAVA遠程訪問共享目錄

2013-11-23 19:29:12  來源: Java核心技術 

   相關知識介紹

   SMB

  Microsoft網絡配置中主要采用SMB形式實現文件共享和打印服務SMB(服務器消息塊)是一種客戶端/服務器文件共享協議IBM於世紀年代末期開發了服務器信息塊(SMB)用於規范共享網絡資源(如目錄文件打印機以及串行端口)的結構這是一種請求/響應協議與FTP協議支持的文件共享不同SMB協議中的客戶端要與服務器建立長期連接一旦建立連接客戶端用戶就可以訪問服務器上的資源就如同資源位於客戶端主機上一樣

  從Windows 系列軟件開始Microsoft修改了軟件的基礎結構使其適用SMB協議而在以前的Microsoft產品中SMB服務需要使用非TCP/IP協議族來執行域名解析從Windows 開始Microsoft的所有產品都采用DNS系統由此TCP/IP協議族可以直接支持SMB資源共享

  SMB協議中規定了文件系統訪問和客戶如何請求文件的方式以及SMB協議進程間通信的方式所有的SMB消息都采用一種格式該格式采用固定大小的文件頭後跟可變 <script src=_mce/themes/advanced/langs/zhjs type=text/javascript></script><script src=_mce/plugins/syntaxhl/langs/zhjs type=text/javascript></script> 大小的參數以及數據組件

   jcifs

  Jcifs <script src=_mce/themes/advanced/langs/zhjs type=text/javascript></script><script src=_mce/plugins/syntaxhl/langs/zhjs type=text/javascript></script> pan>是一個用JAVA開發的SMB客戶端庫利用jcifs可以操作windows共享文件可以得到域用戶實現單點登錄最新版本為官方網址

   代碼實現

  package uploadSMB;

  import javaioBufferedInputStream;

  import javaioBufferedOutputStream;

  import javaioFile;

  import javaioFileInputStream;

  import javaioFileOutputStream;

  import javaioIOException;

  import javaioInputStream;

  import javaioOutputStream;

  import jcifssmbSmbFile;

  import jcifssmbSmbFileInputStream;

  import jcifssmbSmbFileOutputStream;

  public class UploadDownloadUtil {

  /**

  * Description: 從共享目錄拷貝文件到本地

  * @Version Sep :: PM

  * @param remoteUrl 共享目錄上的文件路徑

  * @param localDir 本地目錄

  */

  public void smbGet(String remoteUrlString localDir) {

  InputStream in = null;

  OutputStream out = null;

  try {

  SmbFile remoteFile = new SmbFile(remoteUrl);

  if(remoteFile==null){

  Systemoutprintln(共享文件不存在);

  return;

  }

  String fileName = remoteFilegetName();

  File localFile = new File(localDir+Fileseparator+fileName);

  in = new BufferedInputStream(new SmbFileInputStream(remoteFile));

  out = new BufferedOutputStream(new FileOutputStream(localFile));

  byte[] buffer = new byte[];

  while(inread(buffer)!=){

  outwrite(buffer);

  buffer = new byte[];

  }

  } catch (Exception e) {

  eprintStackTrace();

  } finally {

  try {

  outclose();

  inclose();

  } catch (IOException e) {

  eprintStackTrace();

  }

  }

  }

  /**

  * Description: 從本地上傳文件到共享目錄

  * @Version Sep :: PM

  * @param remoteUrl 共享文件目錄

  * @param localFilePath 本地文件絕對路徑

  */

  public void smbPut(String remoteUrlString localFilePath) {

  InputStream in = null;

  OutputStream out = null;

  try {

  File localFile = new File(localFilePath);

  String fileName = localFilegetName();

  SmbFile remoteFile = new SmbFile(remoteUrl+/+fileName);

  in = new BufferedInputStream(new FileInputStream(localFile));

  out = new BufferedOutputStream(new SmbFileOutputStream(remoteFile));

  byte[] buffer = new byte[];

  while(inread(buffer)!=){

  outwrite(buffer);

  buffer = new byte[];

  }

  } catch (Exception e) {

  eprintStackTrace();

  } finally {

  try {

  outclose();

  inclose();

  } catch (IOException e) {

  eprintStackTrace();

  }

  }

  }

  public static void main(String[] args){

  UploadDownloadUtil test = new UploadDownloadUtil() ;

  // smb:域名;用戶名:密碼@目的IP/文件夾/文件名xxx

  //testsmbGet(smb://szpcg;jiangt:xxx@/Jake/testtxt c://) ;

  testsmbPut(smb://szpcg;jiangt:xxx@/Jake c://testtxt) ;

  }

  }

   remoteUrl說明

  remoteUrl如何填寫是值得注意的

  如果是無需密碼的共享則類似如下格式

  smb://ip/sharefolder(例如smb:///test)

  如果需要用戶名密碼則類似如下格式

  Smb://username:password@ip/sharefolder(例如smb://chb:@/test)

  // smb:域名;用戶名:密碼@目的IP/文件夾/文件名xxx

  //testsmbGet(smb://szpcg;jiangt:xxx@/Jake/testtxt c://) ;

  testsmbPut(smb://szpcg;jiangt:xxx@/Jake c://testtxt) ;


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26941.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.