java使用smb操作win共享文件夹

1 篇文章 0 订阅
package com.zky.util;

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

import javax.servlet.http.HttpServletResponse;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URLEncoder;
import java.net.UnknownHostException;

/**
* 实现通过win共享文件夹,操作文件
*/
public class SmbUtil {
    /**
     * 读取共享文件夹下的所有文件(文件夹)的名称
     * @param remoteUrl
     */
    public static void getSharedFileList(String remoteUrl) {
        SmbFile smbFile;
        try {
            // smb://userName:passWord@host/path/
            smbFile = new SmbFile(remoteUrl);
            if (!smbFile.exists()) {
                System.out.println("no such folder");
            } else {
                SmbFile[] files = smbFile.listFiles();
                for (SmbFile f : files) {
                    System.out.println(f.getName());
                }
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (SmbException e) {
            e.printStackTrace();
        }
    }
    /**
     * 创建文件夹
     * @param remoteUrl
     * @param folderName
     * @return
     */
    public static void smbMkDir(String remoteUrl, String folderName) {
        SmbFile smbFile;
        try {
            // smb://userName:passWord@host/path/folderName
            smbFile = new SmbFile(remoteUrl + folderName);
            if (!smbFile.exists()) {
                smbFile.mkdir();
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (SmbException e) {
            e.printStackTrace();
        }
    }

    /**
     * 上传文件
     * @param remoteUrl
     * @param shareFolderPath
     * @param localFilePath
     * @param fileName
     */
    public static void uploadFileToSharedFolder(String remoteUrl, String shareFolderPath, String localFilePath, String fileName) {
        InputStream inputStream = null;
        OutputStream outputStream = null;
        try {
            File localFile = new File(localFilePath);
            inputStream = new FileInputStream(localFile);
            // smb://userName:passWord@host/path/shareFolderPath/fileName
            SmbFile smbFile = new SmbFile(remoteUrl + shareFolderPath + "/" + fileName);
            smbFile.connect();
            outputStream = new SmbFileOutputStream(smbFile);
            byte[] buffer = new byte[4096];
			// 读取长度
            int len = 0; 
            while ((len = inputStream.read(buffer, 0, buffer.length)) != -1) {
                outputStream.write(buffer, 0, len);
            }
            // 刷新缓冲的输出流
            outputStream.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                outputStream.close();
                inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 下载文件到浏览器
     * @param httpServletResponse
     * @param remoteUrl
     * @param shareFolderPath
     * @param fileName
     */
    public static void downloadFileToBrowser(HttpServletResponse httpServletResponse, String remoteUrl, String shareFolderPath, String fileName) {
        SmbFile smbFile;
        SmbFileInputStream smbFileInputStream = null;
        OutputStream outputStream = null;
        try {
            // smb://userName:passWord@host/path/shareFolderPath/fileName
            smbFile = new SmbFile(remoteUrl + shareFolderPath + "/" + fileName);
            smbFileInputStream = new SmbFileInputStream(smbFile);
			//统一设置响应头
            httpServletResponse.setHeader("content-type", "application/octet-stream");
            httpServletResponse.setContentType("application/vnd.ms-excel;charset=UTF-8");
            httpServletResponse.setHeader("Content-disposition", "attachment; filename=" + fileName);
            // 处理空格转为加号的问题
            httpServletResponse.setHeader("Content-Disposition", "attachment; fileName=" + fileName + ";filename*=utf-8''" + URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20"));
            outputStream = httpServletResponse.getOutputStream();
            byte[] buff = new byte[2048];
            int len;
            while ((len = smbFileInputStream.read(buff)) != -1) {
                outputStream.write(buff, 0, len);
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (SmbException e) {
            e.printStackTrace();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        finally {
            try {
                outputStream.close();
                smbFileInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    /**
     * 下载文件到指定文件夹
     * @param remoteUrl
     * @param shareFolderPath
     * @param fileName
     * @param localDir
     */
    public static void downloadFileToFolder(String remoteUrl, String shareFolderPath, String fileName, String localDir) {
        InputStream in = null;
        OutputStream out = null;
        try {
            SmbFile remoteFile = new SmbFile(remoteUrl + shareFolderPath + File.separator + fileName);
            File localFile = new File(localDir + File.separator + fileName);
            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];
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                out.close();
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    /**
     * 删除文件
     * @param remoteUrl
     * @param shareFolderPath
     * @param fileName
     */
    public static void deleteFile(String remoteUrl, String shareFolderPath, String fileName) {
        SmbFile SmbFile;
        try {
            // smb://userName:passWord@host/path/shareFolderPath/fileName
            SmbFile = new SmbFile(remoteUrl + shareFolderPath + "/" + fileName);
            if (SmbFile.exists()) {
                SmbFile.delete();
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (SmbException e) {
            e.printStackTrace();
        }
    }
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 要设置Win10系统的SMB扫描共享文件夹,您可以按照以下步骤操作: 1. 打开“控制面板”,选择“网络和共享中心”。 2. 点击“更改高级共享设置”。 3. 在“文件和打印机共享”下,选择“启用文件共享”。 4. 在“所有人都可以更改我的文件”下,选择“关闭”。 5. 在“密码保护共享”下,选择“关闭”。 6. 点击“保存更改”。 7. 打开“文件资源管理器”,右键单击要共享的文件夹,选择“属性”。 8. 在“共享”选项卡下,点击“高级共享”。 9. 勾选“共享此文件夹”,输入共享名称,点击“权限”。 10. 在“共享权限”中,添加需要访问该共享文件夹的用户或组,并设置相应的权限。 11. 点击“确定”保存设置。 完成以上步骤后,您就可以在其他设备上通过SMB扫描访问该共享文件夹了。 ### 回答2: Win10操作系统是一款相对于其他操作系统更加强大的系统,许多用户使用Win10来进行各种操作。如果您正在使用Win10系统设置smb扫描,那么在设置共享文件夹时必须遵循以下步骤: 步骤1: 首先,您需要打开“控制面板”,进入“网络和Internet”选项,然后打开“共享中心”页面。 步骤2: 进入共享中心后,点击“更改高级共享设置”。 步骤3: 接下来,滑动到最下方,找到“文件和打印机共享”选项,然后选中“启用文件共享功能”。 步骤4: 在“文件和打印机共享”下,找到“所有人都可以更改(读/写)”选项,选中该选项并保存。 步骤5: 接下来,找到需要共享的文件夹,并右键单击该文件夹,选择“共享”,然后选择“高级共享”。 步骤6: 在“高级共享”选项卡下,启用“共享此文件夹”选项,并指定您要为该共享文件夹分配的共享名称。 步骤7: 接下来,选择“权限”选项卡,并确定您要分配给访问该共享文件夹的用户的访问权限。 步骤8: 最后,点击“共享”按钮以完成设置文件夹共享。 总结: 如果您想在Win10系统中正确设置SMB扫描共享文件夹,您必须按照上述步骤进行。这可以确保您及时找到并使用文件共享功能,同时保护您的文件和数据免受潜在的网络攻击。 ### 回答3: SMB扫描是一种常见的网络扫描方式,可以在不同的操作系统之间进行文件传输和共享。在Win10系统中,我们可以使用以下步骤来设置共享文件夹: 1. 首先,我们需要在系统中开启SMB扫描功能。我们可以打开“控制面板”,并选择“程序和功能”。在这里,我们可以选择“打开或关闭Windows功能”,并勾选“SMB1.0/CIFS 文件共享支持”和“SMB直接(SMB over TCP)”。 2. 接下来,我们需要设置共享文件夹。我们可以在文件资源管理器中找到需要共享的文件夹(例如C:\Users\Public),并右键单击它。选择“属性”,并切换到“共享”选项卡。在这里,我们可以设置文件夹共享的名称和访问权限。我们还可以选择“高级共享”,并在里面设置共享的路径和其他选项。 3. 在设置完共享文件夹后,我们可以在打开的“属性”窗口中选择“共享”选项卡下的“共享”按钮。在这里,我们可以添加需要共享访问的用户和组,并设置他们的权限。例如,我们可以添加一个组,将其权限设置为“读写”,以便所有的组成员都可以访问和编辑共享文件夹。 4. 最后,我们需要测试文件夹的共享是否正常。我们可以在另一台电脑上打开文件资源管理器,并输入共享文件夹的路径。例如,如果我们共享了C:\Users\Public文件夹,并将其名称设置为“Public”,我们可以在另一台电脑上打开文件资源管理器,并输入“\\MyComputerName\Public”来访问共享文件夹。 总之,在Win10系统中设置SMB扫描共享文件夹需要一些简单的步骤,只需要遵循上述步骤即可成功设置。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值