首先导入依赖,JCIFS 是一个开源 Java 库,旨在实现 SMB/CIFS 网络协议。它允许 Java 应用程序访问网络上的共享文件和打印机,从而更容易与基于 Windows 的系统集成。该库支持多种 SMB 功能,包括身份验证、文件操作和目录浏览。
在pom.xml增加依赖
<dependency>
<groupId>jcifs</groupId>
<artifactId>jcifs</artifactId>
<version>1.3.17</version>
</dependency>
创建SmbFileUtil.java
public class SmbFileReader {
public static void smbGetone(String GoalUrl) throws IOException {
SmbFile smbFile = new SmbFile(GoalUrl);
int length = smbFile.getContentLength();// 得到文件的大小
byte buffer[] = new byte[length];
SmbFileInputStream in = new SmbFileInputStream(smbFile);
// 建立smb文件输入流
while ((in.read(buffer)) != -1) {
System.out.write(buffer);
System.out.println(buffer.length);
}
in.close();
}
public static void smbGetall(String GoalUrl, String localUrl) {
InputStream in = null;
OutputStream out = null;
try {
SmbFile remoteFile = new SmbFile(GoalUrl);
if (remoteFile == null) {
System.out.println("不存在");
return;
}
SmbFile[] listFiles = remoteFile.listFiles();
for (int i = 0; i < listFiles.length; i++) {
String fileName = listFiles[i].getName();
File localFile = new File(localUrl + File.separator + fileName);
in = new BufferedInputStream(new SmbFileInputStream(remoteFile + fileName));
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 rootUrl
* @param fileList
* @return
* @throws MalformedURLException
* @throws SmbException
*/
private List<SmbFile> readFiles(String rootUrl, List<SmbFile> fileList) throws MalformedURLException, SmbException {
SmbFile remoteFile = new SmbFile(rootUrl);
if (remoteFile == null) {
System.out.println("不存在");
return null;
}
if (fileList == null) {
fileList = new ArrayList<>();
}
//只同步当前年份测量报告
SmbFile[] listFiles = remoteFile.listFiles();
String fileName = null;
String yearStr = new DateTime(new Date()).getYear().toString();
for (int i = 0; i < listFiles.length; i++) {
fileName = listFiles[i].getName();
if (!fileName.contains(yearStr + "ERP")) {
continue;
}
String url = rootUrl + "/" + fileName;
fileList.addAll(readChildFiles(url, null));
}
return fileList;
}
private static List<SmbFile> readChildFiles(String rootUrl, List<SmbFile> fileList) throws MalformedURLException, SmbException {
SmbFile remoteFile = new SmbFile(rootUrl);
if (remoteFile == null) {
System.out.println("不存在");
return null;
}
if (fileList == null) {
fileList = new ArrayList<>();
}
// 获取当前年份(按照指定规则截取)
SmbFile[] listFiles = remoteFile.listFiles();
for (int i = 0; i < listFiles.length; i++) {
String url = rootUrl + "/" + listFiles[i].getName();
remoteFile = new SmbFile(url);
if (remoteFile.isDirectory()) {
readChildFiles(url, fileList);
} else {
fileList.add(remoteFile);
}
}
return fileList;
}
}

被折叠的 条评论
为什么被折叠?



