<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      在Java程序中讀寫windows共享文件夾

      摘要 使用Java通過JCIFS框架讀寫共享文件夾,使用SMB協(xié)議,并支持域認(rèn)證。

      項(xiàng)目常常需要有訪問共享文件夾的需求,例如讀取共享文件夾存儲(chǔ)的視頻、照片和PPT等文件。那么如何使用Java讀寫Windows共享文件夾呢?

      使用Java訪問擁有全部讀寫權(quán)限的共享文件夾比較簡單,和普通的目錄沒有什么區(qū)別。但是,如果從Linux服務(wù)器訪問一個(gè)windows服務(wù)器上需要用戶名和密碼驗(yàn)證的共享文件夾,就需要一點(diǎn)點(diǎn)小技巧了。這里介紹一個(gè)開源的庫JCIFS,他可以輕松滿足此需求。

      JCIFS是使用Java語言開發(fā)的一款開源框架,通過SMB協(xié)議訪問遠(yuǎn)程共享文件夾,就像訪問本地文件夾一樣,簡簡單單。她同時(shí)支持Windows和Linux共享文件夾,不過,Linux共享文件夾需要安裝Samba服務(wù)軟件(官網(wǎng):http://www.samba.org/)。

      另外,通過掛載該共享文件夾到Linux服務(wù)器下也可以實(shí)現(xiàn),此時(shí)不需要借助SMB協(xié)議,對此,這里不做介紹,感興趣的童鞋可以去問問度娘。

      言歸正傳,maven依賴如下:

      <!-- https://mvnrepository.com/artifact/org.samba.jcifs/jcifs -->
      <dependency>
          <groupId>org.samba.jcifs</groupId>
          <artifactId>jcifs</artifactId>
          <version>1.3.3</version>
      </dependency>

      SMB(Server Message Block)通信協(xié)議是微軟(Microsoft)和英特爾(Intel)在1987年制定的協(xié)議,主要是作為Microsoft網(wǎng)絡(luò)的通訊協(xié)議。SMB 是在會(huì)話層(session layer)和表示層(presentation layer)以及小部分應(yīng)用層(application layer)的協(xié)議。通過設(shè)置“NetBIOS over TCP/IP”使得Samba不但能與局域網(wǎng)絡(luò)主機(jī)分享資源,還能與全世界的電腦分享資源。

      代碼示例:

      import java.io.BufferedInputStream;
      import java.io.BufferedOutputStream;
      import java.io.File;
      import java.io.FileInputStream;
      import java.io.FileOutputStream;
      import java.io.IOException;
      import java.io.InputStream;
      import java.io.OutputStream;
      
      import org.slf4j.Logger;
      import org.slf4j.LoggerFactory;
      
      import jcifs.smb.NtlmPasswordAuthentication;
      import jcifs.smb.SmbFile;
      import jcifs.smb.SmbFileInputStream;
      import jcifs.smb.SmbFileOutputStream;
      
      public class SmbFileUtil {
      
          private static Logger log = LoggerFactory.getLogger(SmbFileUtil.class);
      
          private static String USER_DOMAIN = "yourDomain";
          private static String USER_ACCOUNT = "yourAccount";
          private static String USER_PWS = "yourPassword";
      
          public static void main(String[] args) throws Exception {
      
              // remoteUrl 格式示例 【smb://132.20.2.33/CIMPublicTest/】
              // 目錄
              String shareDir = "smb:// 132.20.2.33/CIMPublicTest/";
              listFiles(shareDir);
              
          }
      
          /**
           * @Title listFiles
           * @Description 遍歷指定目錄下的文件
           * @date 2019-01-11 09:56
           */
          private static void listFiles(String shareDirectory) throws Exception {
              long startTime = System.currentTimeMillis();
      
              // 域服務(wù)器驗(yàn)證
              NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(USER_DOMAIN, USER_ACCOUNT,
                      USER_PWS);
              SmbFile remoteFile = new SmbFile(shareDirectory, auth);
              log.info("遠(yuǎn)程共享目錄訪問耗時(shí):【{}】", System.currentTimeMillis() - startTime);
      
              if (remoteFile.exists()) {
                  SmbFile[] files = remoteFile.listFiles();
                  remoteFile.listFiles(shareDirectory);
                  
                  for (SmbFile f : files) {
                      log.info(f.getName());
                  }
              } else {
                  log.info("文件不存在");
              }
          }
      }

      NtlmPasswordAuthentication類用于域認(rèn)證,需要三個(gè)參數(shù), 第一個(gè)是域名,如果沒有,就賦值null, 第二個(gè)是用戶名,第三個(gè)是密碼。下面列舉SMB協(xié)議的兩個(gè)應(yīng)用場景。SmbFile類和Java的File類十分相似,使用其對象可以處理遠(yuǎn)程共享文件的讀寫。

          /**
           * @Title smbGet
           * @Param shareUrl 共享目錄中的文件路徑,如smb://132.20.2.33/CIMPublicTest/eg.txt
           * @Param localDirectory 本地目錄,如tempStore/smb
           */
          public static void smbGet(String shareUrl, String localDirectory) throws Exception {
              NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(USER_DOMAIN, USER_ACCOUNT,
                      USER_PWS);
              SmbFile remoteFile = new SmbFile(shareUrl, auth);
              if (!remoteFile.exists()) {
                  log.info("共享文件不存在");
                  return;
              }
              // 有文件的時(shí)候再初始化輸入輸出流
              InputStream in = null;
              OutputStream out = null;
              log.info("下載共享目錄的文件 shareUrl 到 localDirectory");
              try {
                  String fileName = remoteFile.getName();
                  File localFile = new File(localDirectory + File.separator + fileName);
                  File fileParent = localFile.getParentFile();
                  if (null != fileParent && !fileParent.exists()) {
                      fileParent.mkdirs();
                  }
                  in = new BufferedInputStream(new SmbFileInputStream(remoteFile));
                  out = new BufferedOutputStream(new FileOutputStream(localFile));
                  byte[] buffer = new byte[1024];
                  while (in.read(buffer) != -1) {
                      out.write(buffer);
                      buffer = new byte[1024];
                  }
                  out.flush(); //刷新緩沖區(qū)輸出流
      
              } catch (Exception e) {
                  e.printStackTrace();
              } finally {
                  out.close();
                  in.close();
              }
          }
      
          /**
           * 
           * @Title smbPut
           * @Description 向共享目錄上傳文件
           * @Param shareDirectory 共享目錄
           * @Param localFilePath 本地目錄中的文件路徑
           * @date 2019-01-10 20:16
           */
          public static void smbPut(String shareDirectory, String localFilePath) {
              InputStream in = null;
              OutputStream out = null;
              try {
                  File localFile = new File(localFilePath);
      
                  String fileName = localFile.getName();
                  SmbFile remoteFile = new SmbFile(shareDirectory + "/" + fileName);
                  in = new BufferedInputStream(new FileInputStream(localFile));
                  out = new BufferedOutputStream(new SmbFileOutputStream(remoteFile));
                  byte[] buffer = new byte[1024];
                  while (in.read(buffer) != -1) {
                      out.write(buffer);
                      buffer = new byte[1024];
                  }
                  out.flush();
              } catch (Exception e) {
                  e.printStackTrace();
              } finally {
                  try {
                      out.close();
                      in.close();
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
              }
          }

       

      posted @ 2019-01-12 10:23  樓蘭胡楊  閱讀(10976)  評(píng)論(4)    收藏  舉報(bào)
      主站蜘蛛池模板: 久久综合亚洲鲁鲁九月天| 最新国产精品好看的精品| 国产香蕉尹人综合在线观看| 国产男女猛烈无遮挡免费视频网站 | 亚洲男人电影天堂无码| 国产精品久久久久婷婷五月 | 亚洲欧美日韩综合久久| 国产不卡一区二区三区视频| 欧美zoozzooz性欧美| 国偷自产一区二区免费视频| 九九热久久只有精品2| 国产自拍偷拍视频在线观看| 九九九精品成人免费视频小说| 国内精品久久久久影院网站| 九九热在线免费视频精品| 亚洲AV国产福利精品在现观看| 免费区欧美一级猛片| 性中国videossexo另类| 午夜激情福利在线免费看| 人妻夜夜爽天天爽| 亚洲成在人线AV品善网好看| 陵川县| 国产亚洲精品久久久久秋霞| 久久久久免费看成人影片| 日韩人妻一区中文字幕| 亚洲无线观看国产精品| 久久精品无码中文字幕| 国产免费久久精品44| 国产自在自线午夜精品| 国产精品区一区第一页| 色国产视频| 亚洲精品无码久久一线| 南阳市| 在线观看潮喷失禁大喷水无码| 久久精品一区二区三区综合| 亚洲 欧美 综合 在线 精品 | 午夜大片免费男女爽爽影院| 日本无遮挡吸乳视频| 久久亚洲精品天天综合网| 亚洲精品成人片在线观看精品字幕| 任我爽精品视频在线播放|