美文网首页
smb访问共享文件夹

smb访问共享文件夹

作者: 风一样的存在 | 来源:发表于2020-07-02 00:22 被阅读0次

由于最近对接一个银行的的银企直连接口,发现银行返回的数据过大会保存成文件,放在前置机中,文档中提倡使用共享文件的方式读取。于是翻阅了一翻资料发现了smb这个东西。

  • 第一步增加依赖
<dependency>
  <groupId>jcifs</groupId>
  <artifactId>jcifs</artifactId>
  <version>1.3.17</version>
</dependency>
  • 第二步开启smb的支持(以window10为例)


    开启SMB文件共享支持
  • 第三步编写工具类
import jcifs.smb.NtlmPasswordAuthentication;
import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileInputStream;
import lombok.extern.slf4j.Slf4j;

/**
 * @Author: jack
 * @Description: smb协议访问共享文件夹
 * @Date: 2020/7/1 17:47
 * @Version: 1.0
 */
@Slf4j
public class SMBUtil {

    /**
     * 读取远程文件
     * @param account
     * @param password
     * @param host
     * @param filePath
     * @return
     */
    public static String smbRead(String account,String password,String host,String filePath){
        String url = createUrl(account,password,host,filePath);
        return smbRead(url);
    }

    public static String smbRead2(String account,String password,String host,String filePath){
        NtlmPasswordAuthentication auth =new NtlmPasswordAuthentication(host, account, password);
        String url = createUrl(host,filePath);
        return smbRead(url,auth);
    }

    /**
     * 不需要账号密码读取远程文件
     * @param host
     * @param filePath
     * @return
     */
    public static String smbRead(String host,String filePath){
        String url = createUrl(host,filePath);
        return smbRead(url);
    }

    public static String smbRead(String url){
        try {
            SmbFile smbFile = new  SmbFile(url);

                SmbFileInputStream in = new  SmbFileInputStream(smbFile);
                byte[] buffer = new byte [1024];
                int read = 0;
                StringBuffer content = new StringBuffer();
                while ((read =in.read(buffer))!=-1){
                    String str = new String(buffer,0, read);
                    content.append(str);
                }
                in.close();
                return content.toString();

        } catch (Exception e) {
            e.printStackTrace();
            log.error("读取共享文件失败");
        }
        return null;
    }

    public static String smbRead(String url,NtlmPasswordAuthentication authentication){
        try {
            SmbFile smbFile = new  SmbFile(url,authentication);
            SmbFileInputStream in = new  SmbFileInputStream(smbFile);
            byte[] buffer = new byte [1024];
            int read = 0;
            StringBuffer content = new StringBuffer();
            while ((read =in.read(buffer))!=-1){
                String str = new String(buffer,0, read);
                content.append(str);
            }
            in.close();
            return content.toString();

        } catch (Exception e) {
            e.printStackTrace();
            log.error("读取共享文件失败");
        }
        return null;
    }

    /**
     * 需要账号密码
     * @param account
     * @param password
     * @param host
     * @param filePath
     * @return
     */
    public static String createUrl(String account,String password,String host,String filePath){
        StringBuffer url = new StringBuffer("smb://");
        url.append(account).append(":").append(password).append("@")
                .append(host).append("/").append(filePath);
        return url.toString();
    }

    /**
     * 不需要账号密码
     * @param host
     * @param filePath
     * @return
     */
    public static String createUrl(String host,String filePath){
        StringBuffer url = new StringBuffer("smb://");
        url.append(host).append("/").append(filePath);
        return url.toString();
    }
}
  • 第四步创建共享文件夹


    创建共享文件夹
  • 第五步代码测试


    运行调试

遇到问题:开始开启windows10上的smb功能,代码一直报错,提示连接异常,重启下电脑恢复正常

相关文章

网友评论

      本文标题:smb访问共享文件夹

      本文链接:https://www.haomeiwen.com/subject/gogkqktx.html