首页 > 编程语言 >【Java 操作共享文件夹,SmbFile类让你轻松实现!】

【Java 操作共享文件夹,SmbFile类让你轻松实现!】

时间:2024-11-28 16:58:33浏览次数:9  
标签:文件 Java String 文件夹 new 共享 SmbFile

在Java中,通过使用 SmbFile 类可以方便地操作共享文件夹。SmbFile 是 JCIFS(Java CIFS Client Library)库的一部分,用于访问基于SMB/CIFS协议的共享文件和打印机。

以下是如何使用 SmbFile 类来操作共享文件夹的详细步骤和代码示例:

1. 添加JCIFS依赖

首先,你需要在你的项目中添加JCIFS库的依赖。如果你使用的是Maven,可以在 pom.xml 文件中添加以下依赖:

<dependency>
    <groupId>jcifs</groupId>
    <artifactId>jcifs</artifactId>
    <version>1.3.19</version>
</dependency>

2. 导入必要的包

在你的Java代码中导入所需的包:

import jcifs.smb.NtlmPasswordAuthentication;
import jcifs.smb.SmbFile;
import jcifs.smb.SmbException;

3. 连接到共享文件夹

要连接到共享文件夹,需要提供共享路径、用户名和密码。下面是一个示例代码,展示了如何连接到一个共享文件夹并列出其内容:

public class SmbFileExample {
    public static void main(String[] args) {
        // 定义共享文件夹的路径
        String url = "smb://hostname/sharedfolder/";
        // 定义用户名和密码
        String username = "yourUsername";
        String password = "yourPassword";

        // 创建认证对象
        NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("", username, password);

        try {
            // 创建SmbFile对象
            SmbFile smbFile = new SmbFile(url, auth);

            // 列出共享文件夹中的文件和子文件夹
            for (SmbFile file : smbFile.listFiles()) {
                System.out.println(file.getName());
            }
        } catch (SmbException e) {
            e.printStackTrace();
        }
    }
}

4. 上传文件到共享文件夹

下面是一个示例代码,展示了如何将本地文件上传到共享文件夹:

public class SmbFileUploadExample {
    public static void main(String[] args) {
        // 定义共享文件夹的路径
        String url = "smb://hostname/sharedfolder/";
        // 定义用户名和密码
        String username = "yourUsername";
        String password = "yourPassword";
        // 定义本地文件路径
        String localFilePath = "C:/path/to/local/file.txt";
        // 定义目标文件路径
        String targetFilePath = url + "uploaded_file.txt";

        // 创建认证对象
        NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("", username, password);

        try {
            // 创建SmbFile对象
            SmbFile remoteDir = new SmbFile(url, auth);
            SmbFile localFile = new SmbFile("file://" + localFilePath);
            SmbFile remoteFile = new SmbFile(targetFilePath, auth);

            // 上传文件
            remoteFile.createNewFile();
            remoteFile.copyFrom(localFile);
            System.out.println("File uploaded successfully!");
        } catch (SmbException | IOException e) {
            e.printStackTrace();
        }
    }
}

5. 下载文件从共享文件夹

下面是一个示例代码,展示了如何从共享文件夹下载文件到本地:

public class SmbFileDownloadExample {
    public static void main(String[] args) {
        // 定义共享文件夹的路径
        String url = "smb://hostname/sharedfolder/";
        // 定义用户名和密码
        String username = "yourUsername";
        String password = "yourPassword";
        // 定义远程文件路径
        String remoteFilePath = url + "remote_file.txt";
        // 定义本地文件路径
        String localFilePath = "C:/path/to/local/downloaded_file.txt";

        // 创建认证对象
        NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("", username, password);

        try {
            // 创建SmbFile对象
            SmbFile remoteFile = new SmbFile(remoteFilePath, auth);
            SmbFile localFile = new SmbFile("file://" + localFilePath);

            // 下载文件
            localFile.createNewFile();
            localFile.copyFrom(remoteFile);
            System.out.println("File downloaded successfully!");
        } catch (SmbException | IOException e) {
            e.printStackTrace();
        }
    }
}

总结

以上代码示例展示了如何使用 SmbFile 类来连接共享文件夹、列出文件、上传文件和下载文件。请确保在使用这些代码时替换相应的主机名、用户名、密码和文件路径。

标签:文件,Java,String,文件夹,new,共享,SmbFile
From: https://blog.csdn.net/Q2024107/article/details/144115351

相关文章

  • JAVA之多线程
    什么是线程?线程(Thread)是一个程序内部的一条执行流程。什么是多线程?多线程是指从软硬件上实现的多条执行流程的技术(多条线程由CPU负责调度执行)如何创建多线程:有两种方法可以创建新的执行线程。一种是将类声明为Thread的子类。此子类应覆盖类Thread的run方法。然后可......
  • 深入理解 Java 虚拟机-第一部分 走进 Java 笔记
    Sun/Oracle公司研发的热门虚拟机有三个:ClassicVM/ExactVM/HotSpotVMClassicVM:基于句柄(Handle)的对象查找方式,需要外挂JITExactVM:优于ClassicVM,使用了准确式内存管理(记录内存中存储的类型是地址还是数值),丢弃句柄,内置JIT,支持热点代码探测(通过计数器找出有......
  • java实现多线程读,单线程写
    多线程读,单线程写excel通过工厂模式,队列实现多线程读取(可以是文件,也可以是数据库),单线程向excel文件写;实现了一个线程出现问题其他线程同步中断。该实现逻辑的同时可以防止oom。  privatestaticfinalintINITIAL_CAPACITY=10;  privatestaticfinalintMAX_CA......
  • java 多线程同步方法CyclicBarrier/CountDownLatch/AtomicBoolean/Semaphore
    CyclicBarrier 有两个构造函数,CyclicBarrier(int),CyclicBarrier(int,Runnable)目的:通过输入任务数实现线程同步; 使用场景: 多线程计算:当多个线程需要分阶段并行处理数据,但在每一阶段结束时需要所有线程同步,以便开始下一阶段的处理。 并行任务协调:例如,在并行搜索或并行数......
  • JavaScript中的匿名函数
    JavaScript中的匿名函数是一种没有名称的函数,它们通常用于需要函数对象而不需要引用函数的场合。匿名函数可以在声明时立即调用,也可以作为参数传递给其他函数,或者赋值给变量。如何使用匿名函数1、立即执行函数表达式(IIFE):立即执行函数表达式是一种常见的匿名函数使用方式,它在定......
  • Q:CRON表达式,Linux和Java的不同写法
    CRON表达式是一个字符串,包含五个到七个由空格分隔的字段(每种软件不一样),表示一组时间,通常作为执行某个程序的时间表。调度精度:Linux的cron调度精度为分钟级别,最小粒度为分钟,而Java中的Quartz框架可以支持秒级别的调用。灵活性:Quartz框架提供了丰富的调度功能,可以支持一些复......
  • 多线程判断redis key导致Java hep space内存溢出
     线上经常发现报如下错误,后来发现rootcause是selectConfigitemforinstanceMap这个方法会查出几十万的结果集然后json压缩解压,写map等等操作,但是这个selectConfigitemforinstanceMap方法被很多地方调用到了,导致极有可能多线程同时都在查出几十万的结果集然后json压缩解压,写map等......
  • Javascript中的==与===
    在JavaScript中,==和===运算符用于比较两个值。==运算符被称为相等运算符(EqualityOperator)。它会比较两个值是否相等,但在比较之前会进行类型转换(如果两个值的类型不同)。如果两个值在类型转换后相等,则返回true。===运算符被称为严格相等运算符(StrictEqualityOperator)。它......
  • 前端技术对JavaScript的事件学习
    事件目录事件EventTarge接口事件模型Event对象事件类型EventTarge接口基本概念作用:EventTarget接口使得DOM元素和其他对象能够处理事件。通过该接口,可以绑定事件的监听函数,移除监听函数,以及触发事件。应用范围:不仅限于DOM节点,还包括一些需要事件通信的浏览器内置对象,如XMLH......
  • 医院分诊管理系统|Java|SSM|VUE| 前后端分离
    【重要1⃣️】前后端源码+万字文档+部署文档【重要2⃣️】正版源码有问题包售后【重要3⃣️】可复制品不支持退换货            【包含内容】【一】项目提供非常完整的源码注释【二】相关技术栈文档【三】源码讲解视频          ......