Java 通过SMB服务远程下载文件及zip包中的文件

本文介绍了JCIFS项目,它是CIFS协议的JAVA实现,并详细展示了如何使用JCIFS结合ZipInputStream来读取和解压远程SMB服务器上的ZIP文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

             jcifs是CIFS在JAVA中的一个实现,是samba组织负责维护开发的一个开源项目,专注于使用java语言对cifs协议的设计和实现。他们将jcifs设计成为一个完整的,丰富的,具有可扩展能力且线程安全的客户端库。这一库可以应用于各种java虚拟机访问遵循CIFS/SMB网络传输协议的网络资源。类似于java.io.File的接口形式,在多线程的工作方式下被证明是有效而容易使用的。

          它的资源url定位:smb://{user}:{password}@{host}/{path},smb为协议名,user和password分别为共享文件机子的登陆名和密码,@后面是要访问的资源的主机名或IP地址。最后是资源的共享文件夹名称和共享资源名。

          Java 实现zip的解压和读取可以使用ZipInputStream 。

举例如下:

 public static void downloadSmb(HttpServletResponse response,String filename,String zipFile) throws Exception{
    	try{    		
    	    SmbFile smbFile = new SmbFile(zipFile);//zipFile是一个包含服务器IP和路径的完整url
    	    System.out.println("smbFile:--"+zipFile);
    	    SmbFileInputStream in = new SmbFileInputStream(smbFile);
    	    ZipInputStream zip = new ZipInputStream(in);
    	    ZipEntry entry = null;
    	    boolean exist = false;
    	    while((entry = zip.getNextEntry()) != null)
    	    {
    	        System.out.println(entry.getName());
    	    	if(entry.getName().equals(filename)){
    	    	     response.setContentType("application/octet-stream");
    	    	     response.setHeader("Content-disposition", "attachment; filename=" + filename);
    	    	     OutputStream out = response.getOutputStream();
    	    	     byte[] b = new byte[1024];
    	     	     int n;
    	     	     while((n = zip.read(b)) != -1)
    	     	     {
    	     	        out.write(b, 0, n);
    	     	     }
    	     	     out.flush();
    	     	     out.close();
    	     	     exist = true;
    	     	     break;
    	    	}
    	      }
    	      zip.close();
    	      if(!exist){
    	    	  throw new Exception("not find path");
    	      }
    	}catch (Exception e) {
		e.printStackTrace();
		throw e;
	}
    	 
    }


主要步骤就是定义一个SmbFile ,将它读到SmbFileInputStream流,通过ZipInputStream流,遍历文件名,获取到想要的指定文件以后,以字节方式读出,在输出到客户端就完成了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值