使用jcifs1.3.1.jar,maven引入,配置如下:
jcifs
jcifs
1.3.17
具体实现代码如下:
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 org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import jcifs.smb.SmbException;
import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileInputStream;
import jcifs.smb.SmbFileOutputStream;
/**
* 文件工具类
* @author GuoZhinan
*
*/
public class FileUitl {
private Logger logger = LoggerFactory.getLogger(this.getClass());
/**
* 获取共享文件夹下文件
* smb://xxx:xxx@192.168.2.188/testIndex/
* xxx:xxx是共享机器的用户名密码
*/
public void getShareDoc(){
String url = "smb://GuoZhinan:gznqwe@192.168.43.83/testShare/";
try {
SmbFile file = new SmbFile(url);
if(file.exists()){
SmbFile[] documents = file.listFiles();
for(SmbFile f : documents){
logger.info(f.getName() + " : " + f.getDate());
}
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (SmbException e){
e.printStackTrace();
}
}
/**
* 从共享目录下载文件
* @param remoteUrl 远程访问地址
* @param localDir 本地保存路径
*/
public void smbGet(String remoteUrl,String localDir) {
InputStream in = null;
OutputStream out = null;
try {
SmbFile remoteFile = new SmbFile(remoteUrl);
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();
}
}
}
/**
* 向共享目录上传文件
* @param remoteUrl 远程保存路径
* @param localFilePath 本地文件地址
*/
public 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();
}
}
}
public static void main(String[] args) {
FileUitl fileUtil = new FileUitl();
fileUtil.getShareDoc();
fileUtil.smbGet("smb://****:****@192.168.43.83/testShare/testFile.txt", "D:\\");
}
}
注意: 一般文件路径使用 ‘\’,smb取共享文件路径使用'/'