当前位置 主页 > 服务器问题 > win服务器问题汇总 >

    java利用SMB读取远程文件的方法

    栏目:win服务器问题汇总 时间:2019-10-14 00:35

    本文实例为大家分享了java利用SMB读取远程文件的具体代码,供大家参考,具体内容如下

    package com.yss.test.FileReadWriter; 
     
    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 java.net.MalformedURLException; 
     
    import jcifs.smb.SmbFile; 
    import jcifs.smb.SmbFileInputStream; 
    import jcifs.smb.SmbFileOutputStream; 
     
    public class RemoteAccessData { 
     
     /** 
      * @param args 
      * @throws IOException 
      */ 
     public static void main(String[] args) throws IOException { 
      smbGet1("smb://192.168.75.204/test/新建 文本文档.txt"); 
      smbGet("smb://192.168.75.204/test/新建 文本文档.txt","e:/"); 
     } 
     
     /** 
      * 方法一: 
      * 
      * @param remoteUrl 
      *   远程路径 smb://192.168.75.204/test/新建 文本文档.txt 
      * @throws IOException 
      */ 
     public static void smbGet1(String remoteUrl) throws IOException { 
      SmbFile smbFile = new SmbFile(remoteUrl); 
      int length = smbFile.getContentLength();// 得到文件的大小 
      byte buffer[] = new byte[length]; 
      SmbFileInputStream in = new SmbFileInputStream(smbFile); 
      // 建立smb文件输入流 
      while ((in.read(buffer)) != -1) { 
     
       System.out.write(buffer); 
       System.out.println(buffer.length); 
      } 
      in.close(); 
     } 
     
     // 从共享目录下载文件 
     /** 
      * 方法二: 
      * 路径格式:smb://192.168.75.204/test/新建 文本文档.txt 
      *    smb://username:password@192.168.0.77/test 
      * @param remoteUrl 
      *   远程路径 
      * @param localDir 
      *   要写入的本地路径 
      */ 
     public static void smbGet(String remoteUrl, String localDir) { 
      InputStream in = null; 
      OutputStream out = null; 
      try { 
       SmbFile remoteFile = new SmbFile(remoteUrl); 
       if (remoteFile == null) { 
        System.out.println("共享文件不存在"); 
        return; 
       } 
       String fileName = remoteFile.getName(); 
       File localFile = new File(localDir + File.separator + fileName); 
       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]; 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } finally { 
       try { 
        out.close(); 
        in.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
     
     // 向共享目录上传文件 
     public static void smbPut(String remoteUrl, String localFilePath) { 
      InputStream in = null; 
      OutputStream out = null; 
      try { 
       File localFile = new File(localFilePath); 
     
       String fileName = localFile.getName(); 
       SmbFile remoteFile = new SmbFile(remoteUrl + "/" + 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]; 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } finally { 
       try { 
        out.close(); 
        in.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
     
     // 远程url smb://192.168.0.77/test 
     // 如果需要用户名密码就这样: 
     // smb://username:password@192.168.0.77/test 
     
    }