最近有一个需求,需要访问内网环境下的window共享文件夹,但是需要用户密码登录。查了下,网络上很多人都是使用 https://www.jcifs.org/ 这个进行访问,但是这个方式在2018年的时候已经在官网下架了。好在还有其他的开源jar包可以使用,在此记录一下。
本实例使用smbj进行开发,官网如下 https://www.javadoc.io/doc/com.hierynomus/smbj/latest/index.html
github地址:https://github.com/hierynomus/smbj
maven引用:
<dependency>
<groupId>com.hierynomus</groupId>
<artifactId>smbj</artifactId>
<version>0.11.3</version>
</dependency>
本实例要访问的网络地址是:\192.168.2.3\temp\临时数据\共享目录
package me.wb;
import com.hierynomus.msfscc.fileinformation.FileIdBothDirectoryInformation;
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 java.io.IOException;
import java.util.concurrent.TimeUnit;
public class Tests {
public static void main(String[] args) throws IOException {
SMBClient client = new SMBClient();
try (Connection connection = client.connect("192.168.2.3")) {
AuthenticationContext ac = new AuthenticationContext("user", "password".toCharArray(), "");
Session session = connection.authenticate(ac);
// Connect to Share
// \\192.168.2.3\temp\临时数据\共享目录 对应“temp”
try (DiskShare share = (DiskShare) session.connectShare("temp")) {
// \\192.168.2.3\temp\临时数据\共享目录 对应“\临时数据\共享目录”
for (FileIdBothDirectoryInformation f : share.list("\\临时数据\\共享目录", "*.csv")) {
System.out.println("File : " + f.getFileName());
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
以上完成连接共享目录的代码。