JAVA操作共享文件夹文件、下载、读取(windows、Linux通用)

2023-11-12

一、导入包(maven中央仓库https://mvnrepository.com/artifact/org.samba.jcifs/jcifs/1.3.3

<!-- jcifs 共享文件夹目录 -->
<dependency>
  <groupId>org.samba.jcifs</groupId>
  <artifactId>jcifs</artifactId>
  <version>1.3.3</version>
</dependency>

 二、工具类


import jcifs.smb.NtlmPasswordAuthentication;
import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileInputStream;
import jcifs.smb.SmbFileOutputStream;

import java.io.*;

public class shareSmbFileUtil {
    private static String USER_DOMAIN = "ip";
    private static String USER_ACCOUNT = "username";
    private static String USER_PWS = "password";

    /**
     * @Title smbGet
     * @Param shareUrl 共享目录中的文件路径,如smb://192.168.1.158/share/test.txt
     * @Param localDirectory 本地目录,如tempStore/smb
     */
    public static void smbGet(String shareUrl, String localDirectory) throws Exception {
        NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(USER_DOMAIN, USER_ACCOUNT,
                USER_PWS);
        SmbFile remoteFile = new SmbFile(shareUrl, auth);
        if (!remoteFile.exists()) {
            System.out.println("共享文件不存在");
            return;
        }
        // 有文件的时候再初始化输入输出流
        InputStream in = null;
        OutputStream out = null;
        System.out.println("下载共享目录的文件 shareUrl 到 localDirectory");
        try {
            String fileName = remoteFile.getName();
            File localFile = new File(localDirectory + File.separator + fileName);
            File fileParent = localFile.getParentFile();
            if (null != fileParent && !fileParent.exists()) {
                fileParent.mkdirs();
            }
            in = new BufferedInputStream(new SmbFileInputStream(remoteFile));
            out = new BufferedOutputStream(new FileOutputStream(localFile));
            byte[] buffer = new byte[1024];
            while (in.read(buffer) != -1) {
                out.write(buffer);
                buffer = new byte[1024];
            }
            out.flush(); //刷新缓冲区输出流

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            out.close();
            in.close();
        }
    }

    /**
     *
     * @Title smbPut
     * @Description 向共享目录上传文件
     * @Param shareDirectory 共享目录
     * @Param localFilePath 本地目录中的文件路径
     * @date 2019-01-10 20:16
     */
    public static void smbPut(String shareDirectory, String localFilePath,String userDomain,
                              String userAccount,String userPassword) {
        InputStream in = null;
        OutputStream out = null;
        try {
            NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(userDomain, userAccount,
                    userPassword);
            File localFile = new File(localFilePath);

            String fileName = localFile.getName();
            SmbFile remoteFile = new SmbFile(shareDirectory + "/" + fileName,auth);
            in = new BufferedInputStream(new FileInputStream(localFile));
            out = new BufferedOutputStream(new SmbFileOutputStream(remoteFile));
            byte[] buffer = new byte[1024];
            while (in.read(buffer) != -1) {
                out.write(buffer);
                buffer = new byte[1024];
            }
            out.flush();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                out.close();
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) throws Exception {

        // remoteUrl 格式示例 【smb://132.20.2.33/CIMPublicTest/】
        // 目录
        String shareDir = "smb://192.168.1.158/share/";
        String localDir = "D://ht/file/PDF/test.pdf";
        smbPut(shareDir,localDir,USER_DOMAIN,USER_ACCOUNT,USER_PWS);
//        listFiles(shareDir);

    }

    /**
     * @Title listFiles
     * @Description 遍历指定目录下的文件
     * @date 2019-01-11 09:56
     */
    private static void listFiles(String shareDirectory) throws Exception {
        long startTime = System.currentTimeMillis();

        // 域服务器验证
        NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(USER_DOMAIN, USER_ACCOUNT,
                USER_PWS);
        SmbFile remoteFile = new SmbFile(shareDirectory, auth);
        System.out.println("远程共享目录访问耗时:【{}】" + (System.currentTimeMillis() - startTime));

        if (remoteFile.exists()) {
            SmbFile[] files = remoteFile.listFiles();
//            remoteFile.listFiles(shareDirectory);

            for (SmbFile f : files) {
                System.out.println(f.getName());
            }
        } else {
            System.out.println("文件不存在");
        }
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAVA操作共享文件夹文件、下载、读取(windows、Linux通用) 的相关文章

随机推荐

  • MySQL-case语句

    btype 1 奖金是薪水的0 1倍 btype 2 奖金是薪水的0 2倍 其他情况奖金是薪水的0 3倍 case btype when 1 then salary 0 1 when 2 then salary 0 2 else salar
  • 机器学习——数据清洗与特征选择

    一 数据清洗 数据清洗 data cleaning 是在机器学习过程中一个不可缺少的环节 其数据的清洗结果直接关系到模型效果以及最终的结论 在实际的工作中 数据清洗通常占开发过程的50 80 左右的时间
  • python 运用 flask框架分页

    k Model query filter by id 0 paginage 1 2 items k Model query filter id gt 0 paginate 1 2 items for i in k print i
  • 维度建模之缓慢渐变维

    维度建模之缓慢渐变维 在从 OLTP 业务数据库向 DW 数据仓库抽取数据的过程中 特别是第一次导入之后的每一次增量抽取往往会遇到这样的问题 业务数据库中的一些数据发生了更改 到底要不要将这些变化也反映到数据仓库中 在数据仓库中 哪些数据应
  • STM32 串口接收中断 代码

    1 代码介绍 今天做项目 要用到串口中断接收 在网上一搜 大量代码 copy过来编译没问题 但是运行起来才发现不能产生中断 于是决定自己搞搞 用了半天的功夫 终于有结果了 2 共同讨论 代码属个人编写 自有不足之处 望大家指出 3 单片机型
  • 代码走查1

    线上问 和研发一起简单的从代码层面去解决问题 略low 代码走查 1 存在的问题 SQL查询 1 对于业务上没有用的字段没必要添加 比如 IsDel 在具体的业务上 删除数据是直接硬删除 直接删除了物理数据 所以 在SQL查询的时候 SQL
  • 数据分析之航空公司客户价值分析

    航空公司客户价值分析 1 挖掘背景与目标 开启了第一个数据分析的项目 针对于航空公司价值的分析 客户关系管理的关键问题是客户分类 通过客户分类 区别无价值客户 高价值客户 企业针对不同价值的客户制定优化的个性化服务方案 采取不同的营销策略
  • c语言嵌入arm指令如何编译,ARM汇编语言与嵌入式C语言混合编程————内嵌汇编.pdf...

    ARM汇编语言与嵌入式C语言混合编程 内嵌汇编 ARM C 汇编语言与嵌入式 语言混合编程 内嵌汇编 在嵌入式程序设计中 有些场合 如对具体的硬件资源进行访问 必须用汇编语言来实 C C 现 可以采用在嵌入式 语言程序中嵌入汇编语言或嵌入式
  • 可以学学Golang、(Go的优势及适合做什么

    1 关键字少 运维简单 2 原生支持高并发 GOROUTINE 协程 进程是资源分配的最小单位 线程是CPU调度的最小单位 一个线程可以有上千个协程 不是在CPU层面去调度的 是在用户空间用Golang的一个调度器去调度不同的协程 由于协程
  • 计算机基础一:IP地址与域名解析

    一 Free IP Scanner 1 是免费的局域网IP地址扫描软件 它简单地Ping每个IP地址以检查它是否还活着 2 可以扫描出某一个局域网中所有的ip地址 正在用的IP地址和没有使用的ip地址 3 可以扫描对应的网卡MAC地址 计算
  • python日常实用技能:如何用Python将图片批量从png格式转换至WebP格式

    本文来源于公众号 csdn2299 喜欢可以关注公众号 程序员学府 最近因为工作需要去研究了下png的压缩 发现转换成webp格式可以小很多 下面给大家分享利用Python将图片批量从png格式转换至WebP格式的方法 下面来一起看看 实现
  • 远程部署java web项目_JavaWeb项目的部署以及远程调试

    Linux环境下软件的安装 Linux环境下的程序的安装 更新 卸载和查看 rpm 命令 相当于windows程序的添加 卸载程序 进程程序的安装 查看 卸载 本地程序安装 rpm ivh 程序名 本地程序查看 rpm qa 本地程序卸载
  • 4分钟插入1000万条数据到mysql数据库表

    准备工作 我用到的数据库为 mysql数据库8 0版本的 使用的InnoDB存储引 创建测试表 CREATE TABLE product id int NOT NULL AUTO INCREMENT name varchar 100 DEF
  • C++读取HDF5文件

    我将博客迁到 GitHub pages 了 本文有些纰漏 请前往 pages 查看 概述 HDF5是一种跨平台存储 高维 数组的数据格式 HDF5有多种语言的绑定 其中包括C 在这里我记录了各种踩坑后如何将数据读入C 读标量 注意头文件不是
  • vscode远程连接Linux失败,提示过程试图写入的管道不存在(三种解决办法)

    vscode报错如下 一 第一种情况 原因是本地的known hosts文件记录服务器信息与现服务器的信息冲突了 导致连接失败 解决方案就是把本地的known hosts的原服务器信息全部删掉 然后重新连接 二 第二种情况 在编写配置文件c
  • SFuzz: Slice-based Fuzzing for Real-Time Operating Systems

    原文地址 SFuzz Proceedings of the 2022 ACM SIGSAC Conference on Computer and Communications Security 源码地址 NSSL SJTU SFuzz gi
  • Python面向过程编程主要知识

    摘自尚学堂的python 人工智能课程 用于复习 python是一种解释型的 面向对象的语言 python的特点 1 可读性强 易修改 2 简介 关注业务本身 生产效率高 3 面向对象 4 免费和开源 5 可移植性和跨平台 python被编
  • spring框架学习之路(一)-入门基础(1)-IOC(控制反转)&DI(依赖注入)

    前言 我就是一小白程序猴 不懂什么高新技术 只是在学习过程中把自己遇到问题或者学到的新知识记录下来 第一给自己复习用 第二小白更懂小白的苦 自己是新手所以应该更了解在刚开始学习时哪些学起来有困难 也就避开了所谓的专家盲点 给后面入坑的人一点
  • 【深度学习】使用kaggle提供的免费GPU在线训练模型

    背景 自己电脑没有GPU 只能找找网上的平台来跑模型 但是又买不起服务器 只能使用免费的平台这样子 免费的在线平台 各大计算平台免费GPU资源总结 本文要介绍的就是第三个 虽然是国外的 但是不用翻墙就可以访问 每周免费30小时使用时长 显卡
  • JAVA操作共享文件夹文件、下载、读取(windows、Linux通用)

    一 导入包 maven中央仓库https mvnrepository com artifact org samba jcifs jcifs 1 3 3