由于最近对接一个银行的的银企直连接口,发现银行返回的数据过大会保存成文件,放在前置机中,文档中提倡使用共享文件的方式读取。于是翻阅了一翻资料发现了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功能,代码一直报错,提示连接异常,重启下电脑恢复正常
网友评论