精华内容
下载资源
问答
  • 常见的文件传输协议—— 共享文件夹
    2021-06-22 06:38:28

    如果项目需求中,需要调用共享文件夹,那会是一件很幸福的事情,

    因为不需要我们过多地编码,直接使用jdk中的File对象即可。

    File file = new FIle("//192.1xxx.xx.xx/xxx/xxxx");
    

    在任务调度上,共享文件夹有很多第三方程序,可以按照自己的需求进行配置,

    在windows系统上,如果设置了可永久共享,手动访问一次共享目录之后,程序就可以访问,并不需要额外的依赖。

    当然,也可以复杂处理,比如:写一个共享文件管理平台,这时候就可以使用JCIFS代码库。

    JCIFS是一个开放源代码客户端库,该库实现了CIFS / SMB网络协议(标准文件共享协议)

    https://www.jcifs.org/

    <dependency>
    <groupId>com.hierynomus</groupId>
    <artifactId>smbj</artifactId>
    <version>0.10.0</version>
    </dependency>
    
    更多相关内容
  • 使用smbj.jar访问共享文件夹,支持SMB2/SMB3,用于解决使用jcifs.jar不支持SMB2/SMB3的问题
  • 局域网下Android访问windows共享文件夹,并进行文件读写.资源是SMBJ要用到的jar包
  • 近期在做公司项目时,有个工作站文件、数据采集的功能需求,文件会被存储在...(2)采用共享文件夹的方式,这种方式更简单一些 于是决定采用第二种方式,使用的依赖是SMBJ,dependency是 <!--支持文件共享SM

    近期在做公司项目时,有个工作站文件、数据采集的功能需求,文件会被存储在局域网内某台电脑的data/{yyyyMMdd}/...文件夹下,yyyyMMdd代表当天的日期,百度查了下,通常有两种方式可以实现:

    (1)FTP的方式,就是把每台设备都安装一下FTP服务搞成一个FTP文件服务器,这种方式操作起来会比较麻烦,而且用户自己不太会操作

    (2)采用共享文件夹的方式,这种方式更简单一些

    于是决定采用第二种方式,使用的依赖是SMBJ,dependency是

            <!--支持文件共享SMB1协议-->
            <!--<dependency>
                <groupId>org.samba.jcifs</groupId>
                <artifactId>jcifs</artifactId>
                <version>1.3.17</version>
            </dependency>-->
            <!--支持文件共享SMB2/3协议-->
            <dependency>
                <groupId>com.hierynomus</groupId>
                <artifactId>smbj</artifactId>
                <version>0.10.0</version>
            </dependency>

    本来考虑使用jcifs,但其支持的是SMB1协议,查阅了其官网发现win10系统已抛弃了SMB1协议而采用SMB2/3协议,并且在该网站推荐使用smbj,因此决定使用smbj来实现访问共文件夹。GitHub地址可参考:https://github.com/hierynomus/smbj

    If you're looking for the latest and greatest open source Java SMB library, 
    this is not it. JCIFS has been in maintenance-mode-only for several years and although what it does support works fine (SMB1, NTLMv2, midlc, MSRPC and various utility classes), 
    jCIFS does not support the newer SMB2/3 variants of the SMB protocol which is slowly becoming required (Windows 10 requires SMB2/3). 
    JCIFS only supports SMB1 but Microsoft has deprecated SMB1 in their products. 
    So if SMB1 is disabled on your network, JCIFS' file related operations will NOT work.

    Fortunately there are multiple new open source SMB Java projects to try including the following:

    比较之后决定使用smbj来实现,在此之前需要做一些准备工作。

    (1)把文件夹设置为共享文件夹,并且最好设置为密码访问的方式,否则局域网内所有电脑都能访问该文件夹。

     指定为共享文件夹,选择共享给哪个用户,默认是需要账号密码的,如果你的电脑用户都是无密码的,那么你可以选择让该文件夹设置为不共享,如果你希望是需要密码的那么你最好自己新建个用户。

    (2) 如果选择有密码的共享,本地用户本来就有密码那在代码里使用该用户密码访问就可以,如果没有的话可以新建一个带密码的用户。

    (2)

    如下是编写的访问共享文件的代码部分。

                    String equiptIp  = "10.x.x.x";
                    String authUserName = "xxx";
                    String authPwd = "xxx";
                    String shareDir = "share";
                    Connection connection = null;
                    Session session = null;
                    DiskShare dirShare = null;
                    try {
                        connection = client.connect(equiptIp);
                    } catch (IOException e1) {
                        LOGGER.info(equiptIp + "连接失败!");
                        e1.printStackTrace();
                        return ;
                    }
                        LOGGER.info(equiptIp + "连接成功:" + connection.isConnected());
                        AuthenticationContext ac = new AuthenticationContext(authUserName, authPwd.toCharArray(), null); //null位置是输入域名的,没有可为空
    
                    try {
                        session = connection.authenticate(ac);
                    } catch (Exception e) {
                        LOGGER.info(equiptIp + "认证失败失败!");
                        e.printStackTrace();
                        continue;
                    }
                    LOGGER.info(equiptIp + "认证成功!");
                    try {
                        dirShare = (DiskShare) session.connectShare(shareDir);
                    } catch (Exception e) {
                        LOGGER.info(equiptIp + "读取共享文件夹" + shareDir +"失败!");
                        e.printStackTrace();
                        continue;
                    }
                    
                    String fileDir = "20210906"+ "/dir1";
                    if (dirShare.folderExists(fileDir)) {
                        Directory directory = dirShare.openDirectory(fileDir, EnumSet.of(AccessMask.FILE_LIST_DIRECTORY), null, SMB2ShareAccess.ALL, SMB2CreateDisposition.FILE_OPEN, null);
                        List<FileIdBothDirectoryInformation> list = directory.list();
                        for (FileIdBothDirectoryInformation f : list) {
                            String fileName = f.getFileName(); // 文件名字
                            String fileUrl = fileDir + "/" + fileName;
    
                            if (!".".equals(fileName) && !"..".equals(fileName) && dirShare.fileExists(fileUrl)) {
                                // 这里就可以拿到文件流了,可以读取
                               File smbFileRead = dirShare.openFile(fileUrl, EnumSet.of(AccessMask.GENERIC_READ), null, SMB2ShareAccess.ALL, SMB2CreateDisposition.FILE_OPEN, null);
                                InputStream in = smbFileRead.getInputStream();
    // ......
                            }
    
                        }
                    }
                    try {
                        if (dirShare != null) {
                            dirShare.close();
                        }
                        if (session != null) {
                            session.close();
                        }
                        if (connection != null) {
                            connection.close();
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

    在拿到inputStream后就可以读取文件到应用服务器了,之后的操作可以按照我们的业务来编写代码。

    由于采用的定时任务,为防止重复读取文件,我的业务代码里使用(fileName + 系统业务的一个相关ID + 当天日期yyyyMMdd)做MD5加密得到一个字符串作为这个文件存储数据表的ID,每次访问共享文件的时候会作比较。是否已读取过。

    需求中还包括CSV数据采集和Access数据采集,后续更新。

    展开全文
  • smb协议访问带用户名密码的共享文件夹,是一个完全用Java开发的SMB客户端库。它紧密地遵循CIFS规范(是Microsoft Windows平台标准文件共享协议),支持Unicode,命令管道,批处理,线程化调用者的IO复用,加密认证,...
  • 共享文件夹无法访问

    2017-07-22 16:48:58
    共享目录无法访问,可用一试
  • smb访问共享文件夹

    2021-04-21 16:01:43
    org.samba.jcifs jcifs 1.3.17 后面使用下面jar成功读取共享文件夹。 org.codelibs jcifs 2.1.19 成功解决不能读取的问题。 String domain = "DAHUATECH"; String username = "username"; String password = ...

    之前使用下面jar,多方测试都无法成功。

    <dependency>
        <groupId>org.samba.jcifs</groupId>
        <artifactId>jcifs</artifactId>
        <version>1.3.17</version>
    </dependency>

    后面使用下面jar成功读取共享文件夹。

    <dependency>
        <groupId>org.codelibs</groupId>
        <artifactId>jcifs</artifactId>
        <version>2.1.19</version>
    </dependency>

    成功解决不能读取的问题。

    String domain = "DAHUATECH";
    String username = "username";
    String password = "password";
    String filePath = "smb://ip/DocLib/1";
    NtlmPasswordAuthenticator npa = new NtlmPasswordAuthenticator(null, username, password);
    CIFSContext context = SingletonContext.getInstance().withCredentials(npa);
    SmbFile sf = new SmbFile(filePath, context);
    System.out.println(sf);
    if (sf != null) {
        for (int i = 0; i < sf.listFiles().length; i++) {
            System.out.println(sf.listFiles()[i].getPath());
        }
    
    }
    展开全文
  • java调用cmd命令实现访问windows共享目录(需不需要密码均可),然后根据指定文件路径下载文件到我们自己配置的本地目录,main函数为测试代码
  • 首先导入依赖 <dependency> <groupId>jcifs</groupId> <artifactId>jcifs</artifactId> <version>1.3.17</version>...import java.io.Fil

    首先导入依赖

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

    工具类(上代码)

    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.BufferedInputStream;
    import jcifs.smb.SmbFile;
    import jcifs.smb.SmbFileInputStream;
    import jcifs.smb.SmbFileOutputStream;
    
    public class CopyFile {
    	    /** 
    	     * @param GoalUrl获取文件地址
    	           *  远程路径 smbGetone://192.168.75.204/test/新建 文本文档.txt 
    	     * @throws IOException
    	     */  
    	    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();  
    	    }  
    	    /**
    	     *  //smbGetall("smb://192.168.2.100//ceshi//","C:/copy"); 
    	     * @param GoalUrl获取文件地址
    	     * @param localUrl本地地址
    	     */
    	    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();  
    	            }  
    	        }  
    	    }  
    	  /**
    	   *  UploadFile("smb://192.168.2.100//FileServer//upload//","C:/copy/ceshi.pdf");
    	   * @param GoalUrl目标位置
    	   * @param localUrl本地文件地址
    	   */
    	    public static void UploadFile(String GoalUrl, String localUrl) {  
    	        InputStream in = null;  
    	        OutputStream out = null;  
    	        try {  
    	            File localFile = new File(localUrl);  
    	            String fileName = localFile.getName();  
    	            SmbFile remoteFile = new SmbFile(GoalUrl + "/" + fileName);  
    	            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];  
    	            }  
    	        } catch (Exception e) {  
    	            e.printStackTrace();  
    	        } finally {  
    	            try {  
    	                out.close();  
    	                in.close();  
    	            } catch (IOException e) {  
    	                e.printStackTrace();  
    	            }  
    	        }  
    	    }  
    	  
    }
    

    感兴趣的小伙伴可以去试试。。。

    展开全文
  • 前言:最近某项目新增一个需求,需要将原本上传到tomcat 应用服务器上的文件上传到 windos 的共享文件夹,所以综合了网上资料,自己开始了如下尝试。 一、引入相关依赖 1、使用smbFile 操作共享文件夹需要用到以下...
  • PS:背景需求来自Andorid移动端访问Window共享文件夹 工具: Unity2018.4.36f1 AS2020.3 什么是smb协议 开启共享文件夹 SMBFile流 AS打包aar Unity编译APK以及调用aar 参考文献...
  • 最近tomcat做了负载均衡,碰到一个难题,就是上传文件的共享问题。 最后使用的解决方案是使用一个共享地址,该地址可以被多个服务器共同访问。...实现上传文件到网络共享文件夹和从网络共享文件夹下载文件
  • 文件夹共享失败解决方式

    千次阅读 2019-06-05 22:30:17
    1简介 文件夹共享失败,总是提示输入用户名或者密码失败。 2解决方式 win7访问共享文件失败的原因有哪些? 关注6、7、9、11、13、14
  • 相关知识介绍1.1 SMBMicrosoft 网络配置中主要采用SMB 形式实现文件共享和打印服务,SMB (服务器消息块)是一种客户端/ 服务器文件共享协议。IBM 于20 世纪80 年代末期开发了服务器信息块(SMB ),用于规范共享网络...
  • 材料:电脑 win10、一台安卓机电脑 不需要...无密码也可以访问文件夹文件夹右键 --- 共享 --- 密码保护 -- “网络和共享中心”打开后 所有网络 --- 密码保护的共享 -- 无密码保护的共享3.取消文件夹只读属性文件夹...
  • 更换类为smbj即可。 以下是我的实例代码 传参第一个是ip地址,用户名,密码,域名,共享文件的名称 static void uploadFile2(String hostname, String username, String password, String domain, String ...
  • 最近我们的小团队需要在服务器上共分出一个共享文件夹用于大家存放公共的资源文档, 大家想啊,这肯定很简单呀,在Windows下面只要创建相关的windows account,共享某个文件夹,把读/写权限给我们创建的account的,...
  • Samba文件共享服务1. Samba服务程序转中的参数以及作用pdbedit步骤2.NFS(网络文件系统)3.autofs自动挂载服务 1. Samba服务程序转中的参数以及作用 【global】 参数 作用 workgroup=MYGROUP #工作组名称 ...
  • java操作网络共java-smb2

    2020-04-01 22:50:13
    java操作网络共享 smb2协议 使用smbj.jar访问共享文件夹,解决SMB2/SMB3共享文件夹访问 使用smbj.jar访问共享文件夹,支持SMB2/SMB3,用于解决使用jcifs.jar不支持SMB2/SMB3的问题
  • Android手机SMB访问macOS文件

    千次阅读 2021-06-04 11:37:11
    1准备工作:(1)mac【系统偏好】->【用户与群组】->【用户与群组】->...勾选 【文件共享】(使用SMB来共享文件和文件夹),切换到【用户】点“+”选择刚刚新建的用户"share"2 AndroidStudio:(1)app目录下 ...
  • 虚拟机,均要检测1.... IP地址是否配置########################################################################################################### samba 文件共享(共享文件夹) Samba 软件项目– ...
  • SMB,即"Server Message Block" 服务器信息块,是一个网络文件共享协议,它能被用于Web连接和客户端与服务器之间的信息沟通,允许应用程序和终端用户从远端的文件服务器访问文件资源。 SMB通信协议是微软(Microsoft...
  • //主要利用类 SmbFile 去实现读取共享文件夹 shareFile 下的所有文件(文件夹)的名称 String URL="smb://10086:10086@192.168.100.86/ybweatherweb/2-各类服务产品/23-专业服务产品/移动部门/2017/"; // String...
  • SMB 2.0和3.0协议 Java应用

    千次阅读 2020-07-23 13:47:36
      SMB1.0协议由于在文件共享传输过程中存在的传输效率低以及传输空间小等缺陷逐渐被抛弃了。为了更好的实现网络中文件的共享,在SMB1.0基础上开发了新的网络文件传输协议,即SMB2.0。   · SMB 2.0   · 相比...
  • 最近遇到了一个奇怪的问题,vmware view 4.6环境下,客户端是XP机器,域用户的主目录Z盘设置为服务器上的共享文件夹\\server\A\B\C,大多数情况下,用户登录后可以正常连接到Z盘,也可以正常访问数据。在极少数情况...

空空如也

空空如也

1 2
收藏数 26
精华内容 10
关键字:

smbj 访问共享文件夹

友情链接: g3图书管理系统.zip