`

使用smb协议获取远程服务器的文件(共享文件)

    博客分类:
  • Java
阅读更多

       最近用户需要需要程序定时去读取另外一台机器的EXCEL文件,我出了个解决方案:因为是windows服务器,所以我在本地映射了一个盘Z然后就想读取本机的文件那样读取,结果临到上生产的时候发现只要服务器休眠后映射就会被断开,导致读取失败,找不到文件。

       后来多方google之后,发现SMB协议 ,屌丝程序员的福音啊。

      SMB协议(百度百科) :     http://baike.baidu.com/link?url=yEZWDgVzifVDdxooeiuFu8u3PFYrU5W-5_E_kqF_mPgadRI9MeUeUv5XBX1e4r7ghpbM3lmSTY3qhnf27c0FMq

     

     JAVA中的类库:jcifs该协议做了很好的支持:

     不说了,贴代码:

      

/**
	 * 以Smb协议读取共享文件下文件
	 * @param fileName
	 * @return
	 * @throws Exception
	 */
	private InputStream getSmbRemoteFile(String fileName) throws Exception {

		String hostIp = SysConfig.getInstance().getValue("dps_host_ip");
		String domain = SysConfig.getInstance().getValue("dps_domain");
		String userName = SysConfig.getInstance().getValue("dps_username");
		String pwd = SysConfig.getInstance().getValue("dps_password");

		UniAddress dc = UniAddress.getByName(hostIp);
		NtlmPasswordAuthentication authentication = new NtlmPasswordAuthentication(
				domain, userName, pwd);
		SmbSession.logon(dc, authentication);
                
		String fileUrl = "smb://" + hostIp + "/mfgcom/Commons/DPS/" + fileName;

		logger.info(String.format("开始从远程地址:%s以SMb协议读取数据", fileUrl));
		SmbFile remoteFile = new SmbFile(fileUrl, authentication);
		// remoteFile.connect(); // 尝试连接
		logger.info("remoteFile path:" + remoteFile.getPath());

		InputStream in = new BufferedInputStream(new SmbFileInputStream(
				remoteFile));
		if (null == in) {
			logger.error(String.format("远程(%s)读取数据失败!", fileUrl));
		}
		return in;
	}

      

 

分享到:
评论

相关推荐

    利用smb协议读取远程文件

    SMB(Server Message Block)通信协议是微软(Microsoft)和英特尔(Intel)在1987年制定的协议,主要是作为Microsoft网络的通讯协议。SMB 是在会话层(session layer)和表示层(presentation layer)以及小部分应用...

    Android smb访问共享文件以及播放共享文件

    - Android可以利用VLC、ExoPlayer等多媒体播放器框架,通过SMB协议访问并播放远程服务器上的视频文件。 - 需要将SMB文件路径转换为合适的URI,然后传递给播放器。例如,对于VLC,可以使用`vlc://`或`smb://`前缀。...

    CIFS协议 SMB协议

    SMB协议最初由IBM提出,用于不同计算机间共享文件、打印机等资源。Microsoft采用了这一协议,并在其操作系统中广泛支持,后来推出了面向Internet的版本CIFS,以满足开放性和灵活性的需求。下面详细解释这两个协议的...

    C#实例 实现WMI连接目标,运行命令与获取计算机信息并能打开对方SMB同时实现连接并完成文件传输一整套解决方案 附Log4Net日志

    C#实例 实现WMI连接目标,运行命令与查询状态并能打开对方SMB同时实现连接并完成文件传输一整套解决方案 附...1、远程获取计算机信息 2、执行命令 3、重启电脑 4、打开进程 5、打开共享SMB 6、连接SMB并实现传输文件等

    使用smbj.jar访问共享文件夹,解决SMB2/SMB3共享文件夹访问的问题

    SMB是一种网络通信协议,主要用于在局域网内共享文件、打印机、串行端口和互联网连接。早期版本的SMB(如SMB1)存在一些安全漏洞和性能问题。随着技术的发展,SMB2和SMB3相继推出,带来了更高的性能、更强的安全性和...

    java利用SMB读取远程文件的方法

    jcifs 库是 Java 实现的 SMB 客户端库,提供了对 SMB 协议的支持,可以让 Java 应用程序访问 SMB 服务器上的文件和打印机。jcifs 库的使用非常广泛,特别是在企业级应用中。 在 Java 中,我们可以使用 jcifs 库来...

    微软文件共享协议2

    微软文件共享协议,尤其是MS-SMB(服务器消息块)和MS-SMB2,是微软开发的一套用于客户端与服务器之间共享文件和文件夹的通信协议。这些协议构成了Windows操作系统网络和分布式文件系统的核心。MS-CIFS(通用互联网...

    超详细!java访问windows共享目录并下载文件

    - 在获取到共享目录的访问权限后,我们可以使用Java的I/O流来读取和下载文件。这通常涉及`FileInputStream`(用于读取远程文件)和`FileOutputStream`(用于写入本地文件)。`SmbUtils.java`中的某个方法可能负责从...

    配置smb服务器

    SMB(Server Message Block)协议是一种网络文件共享协议,它允许用户通过网络访问远程计算机上的文件和打印机等资源。SMB协议最初由IBM开发,后来被微软广泛采用,并在此基础上发展出了CIFS(Common Internet File ...

    java操作共享文件

    Java提供了一些库来实现这一功能,其中之一就是jcifs库,它是一个开源的Java SMB(Server Message Block)客户端,使得Java程序能够方便地操作Windows网络共享文件。在本文中,我们将深入探讨如何使用jcifs库中的...

    Ubuntu的SMB服务器安装收集.pdf

    标题 "Ubuntu的SMB服务器安装收集.pdf" ...这个过程对网络管理员或希望在多平台间共享文件的用户非常实用,简化了跨平台协作的难度。记得在设置过程中确保网络安全,例如使用强密码,并根据需要限制用户的访问权限。

    java共享文件下载依赖包jcifs-1.3.3.jar

    SMB是一种广泛使用的网络文件共享协议,尤其在企业环境中,用于共享文件、打印机等资源。 jcifs-1.3.3.jar的主要功能和知识点包括: 1. **SMB协议支持**:jcifs库实现了SMB协议,使得Java程序可以像操作本地文件...

    java向其他机器写文件 共享机器写文件

    ### Java向其他机器写文件与共享机器写文件 在Java编程中,经常需要实现跨机器文件操作的功能...通过上述步骤,我们可以使用Java实现对远程服务器的文件读写操作,这对于开发分布式系统或进行数据同步等场景非常有用。

    获取主机共享文件夹的资源

    另一种获取共享文件的方式是使用云存储服务,如OneDrive、Google Drive或Dropbox。这些服务提供了便捷的文件同步和共享功能,只需将文件上传至云端,其他用户通过链接或授权访问即可。 总结来说,获取主机共享...

    java 操作windows 共享目录方法介绍

    SMB(Server Message Block)协议,也称为CIFS(Common Internet File System),是一种客户端/服务器类型的网络协议,主要用于提供共享访问文件、打印机及各种应用服务。该协议最早由IBM在1980年代开发,用于其网络...

    利用jcifs-1.3.15.jar实现共享文件上传下载

    1. **创建SmbFile对象**:指定远程共享文件的URL,格式通常为`smb://服务器名/共享路径/文件名`。例如:`smb://server/shared/folder/test.txt`。 2. **获取SmbFileOutputStream**:使用SmbFile的`getOutputStream...

    Ubuntu的SMB服务器安装.pdf

    SMB(Server Message Block)是一种网络文件共享协议,它允许不同操作系统之间的计算机进行文件共享和打印服务。在Linux环境下,通常使用SAMBA软件包实现SMB服务。SAMBA能够使Linux系统与Windows系统的计算机无缝...

    远程电脑文件枚举.rar

    2. 文件系统API:用于与远程服务器交互,请求文件和目录信息。 3. 编程技术:如Python的`os`和`paramiko`库,或Windows批处理脚本,用于实现枚举和检索功能。 4. 网络安全:确保所有的远程操作都是在安全和授权的...

Global site tag (gtag.js) - Google Analytics