局域网读取文件
采用smbj协议进行读取
1.添加依赖
<!-- https://mvnrepository.com/artifact/com.hierynomus/smbj -->
<dependency>
<groupId>com.hierynomus</groupId>
<artifactId>smbj</artifactId>
<version>0.9.0</version>
</dependency>
2.代码示例
import com.hierynomus.msdtyp.AccessMask;
import com.hierynomus.msfscc.fileinformation.FileIdBothDirectoryInformation;
import com.hierynomus.mssmb2.SMB2CreateDisposition;
import com.hierynomus.mssmb2.SMB2ShareAccess;
import com.hierynomus.smbj.SMBClient;
import com.hierynomus.smbj.SmbConfig;
import com.hierynomus.smbj.auth.AuthenticationContext;
import com.hierynomus.smbj.connection.Connection;
import com.hierynomus.smbj.session.Session;
import com.hierynomus.smbj.share.DiskShare;
import com.hierynomus.smbj.share.File;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.EnumSet;
import java.util.concurrent.TimeUnit;
/**
* SMB2连接示例
* 例: 我们当前要连接 IP为:123.123.123.123 目录为: SRC/SMB2/ 下的文件
*/
public class SMB2Connect {
private static final String SHARE_DOMAIN = "192.168.40.83";
private static final String SHARE_USER = "user";
private static final String SHARE_PASSWORD = "pwd";
private static final String SHARE_SRC_DIR = "MyApp";
private static final String SHARE_DST_DIR = "ReHeatFurApp/data";
public static void main(String[] args) {
//获取上一天日期 格式化
LocalDate localDate = LocalDate.now().minusDays(1);
String yesterDay = localDate.format(DateTimeFormatter.ofPattern("/yyyy/MM/dd/"));
// 设置超时时间(可选)
SmbConfig config = SmbConfig.builder().withTimeout(120, TimeUnit.SECONDS)
.withTimeout(120, TimeUnit.SECONDS) // 超时设置读,写和Transact超时(默认为60秒)
.withSoTimeout(180, TimeUnit.SECONDS) // Socket超时(默认为0秒)
.build();
// 如果不设置超时时间 SMBClient client = new SMBClient();
SMBClient client = new SMBClient(config);
try {
Connection connection = client.connect("共享端ip地址"); // 如:123.123.123.123
AuthenticationContext ac = new AuthenticationContext(SHARE_USER, SHARE_PASSWORD.toCharArray(), SHARE_DOMAIN);
Session session = connection.authenticate(ac);
// 连接共享文件夹
DiskShare share = (DiskShare) session.connectShare(SHARE_SRC_DIR);
String folder = SHARE_DST_DIR + yesterDay;
String dstRoot = "d:/" + SHARE_SRC_DIR + "/" + folder; // 如: D:/smd2/
//判断本地目录是否存在 不存在则创建
java.io.File dstFile = new java.io.File(dstRoot);
if (!dstFile.exists()) {
dstFile.mkdirs();
}
for (FileIdBothDirectoryInformation f : share.list(folder, "*.csv")) {
String filePath = f.getFileName();
String dstPath = dstRoot + f.getFileName();
FileOutputStream fos = new FileOutputStream(dstPath);
BufferedOutputStream bos = new BufferedOutputStream(fos);
if (share.fileExists(folder + filePath)) {
System.out.println("正在下载文件:" + f.getFileName());
File smbFileRead = share.openFile(folder + filePath, EnumSet.of(AccessMask.GENERIC_READ), null, SMB2ShareAccess.ALL, SMB2CreateDisposition.FILE_OPEN, null);
InputStream in = smbFileRead.getInputStream();
byte[] buffer = new byte[4096];
int len = 0;
while ((len = in.read(buffer, 0, buffer.length)) != -1) {
bos.write(buffer, 0, len);
}
bos.flush();
bos.close();
System.out.println("文件下载成功");
System.out.println("==========================");
} else {
System.out.println("文件不存在");
}
}
//try {
// //删除文件夹
// share.rmdir("ReHeatFurApp/data", true);
//} finally {
// share.close();
// DiskShare shareDel = (DiskShare) session.connectShare(SHARE_SRC_DIR);
// //删除文件夹
// shareDel.rmdir("ReHeatFurApp/data", true);
//}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (client != null) {
client.close();
}
}
}
}
参考文章:https://blog.csdn.net/u013092293/article/details/83958491?spm=1001.2014.3001.5502