局域网读取文件

局域网读取文件

采用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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值