您的位置:首页 > 其它

JCIFS实现远程服务器共享文件上传下载

2016-03-02 09:40 866 查看
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/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: