java 使用smb获取共享文件夹文件 和上传到共享文件夹

首先导入依赖,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;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值