JCIFS是CIFS 在JAVA中的一个实现,是samba组织负责维护开发的一个开源项目,专注于使用java语言对cifs协议的设计和实现。他们将jcifs设计成为一个完整的,丰富的,具有可扩展能力且线程安全的客户端库。这一库可以应用于各种java虚拟机访问遵循CIFS/SMB网络传输协议的网络资源(通常是共享文件)。类似于java.io.File的接口形式,在多线程的工作方式下被证明是有效而容易使用的。
下面看代码说话。
下载实现文件:
public void netWorkFileDown(String ip, String userName, String passWord, String filePath, OutputStream out)
throws Exception {
String info = "";
SmbFileInputStream in = null;
try {
if (StringUtils.isNotBlank(userName) && StringUtils.isNotBlank(passWord)) {
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(ip, userName, passWord);
SmbFile fp = new SmbFile("smb://" + ip + "/" + StringUtilDI.parseSystemDirectorySeparator(filePath,"/"),auth);
in = new SmbFileInputStream(fp);
} else {
SmbFile fp = new SmbFile("smb://" + ip + "/" + StringUtilDI.parseSystemDirectorySeparator(filePath,"/"));
in = new SmbFileInputStream(fp);
}
byte[] b = new byte[8192];
int n;
while ((n = in.read(b)) > 0) {
out.write(b, 0, n);
}
} catch (Exception e) {
info = e.getMessage();
}finally{
if(null != in){
in.close();
}
}
}
上传实现:
public void netWorkFileUpload(String ip, String userName, String passWord, String filePath, InputStream in)
throws Exception {
String info = "";
SmbFileOutputStream out = null;
try {
if (StringUtils.isNotBlank(userName) && StringUtils.isNotBlank(passWord)) {
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(ip, userName, passWord);
SmbFile fp = new SmbFile("smb://" + ip + "/" + StringUtilDI.parseSystemDirectorySeparator(filePath,"/"),auth);
out = new SmbFileOutputStream(fp);
} else {
out = new SmbFileOutputStream("smb://" + ip + "/" + filePath);
}
byte[] b = new byte[8192];
int n;
while ((n = in.read(b)) > 0) {
out.write(b, 0, n);
}
} catch (Exception e) {
e.printStackTrace();
info = e.getMessage();
}finally{
if(null != in){
in.close();
}
if(null != out){
out.close();
}
}
}
二者相似,一个是输出,一个是输入。总结一下:
第一步:首先须知道读取的共享文件所在的IP地址、用户名、密码及目录结构。
例1:smb://userName:password@ip/filePath(一般远程读取其他服务器共享文件需要)
例2:smb://ip/filePath(读取应用本地可以不需要用户名和密码)
注意:远程主机要把对应的文件夹设置为共享,而且要保证在win+r中可以访问远程共享文件。
第二步:提供本地保存临时文件的地址目录;
例:D://temp (文件夹必须事先创建好,或者在程序中创建)
附JCIFS官网https://jcifs.samba.org/