Java远程共享目录的操作代码

 更新时间:2017年08月31日 12:03:44   作者:独具匠心  
这篇文章主要介绍了java操作远程共享目录的实现代码,非常不粗,具有参考借鉴价值,需要的朋友可以参考下

一.前言

     根据客户反馈,在进行文件下载的时候,新增远程共享目录,下载对应的文件到远程共享目录,采用常用的IO操作模式,提示下载成功,但是客户去远程共享目录查看对应的下载文件,反馈说没有找到对应的文件。要求系统需要支持上传远程共享目录,为什么有一个这样的需求?由于下载的文件涉及到了支付文件,里面的金额不允许进行修改,如果放在本地路径有可能会不会出现人为的修改,一般涉及到钱的问题,客户都是比较谨慎的,刚好没有接触过操作远程共享目录的,就google了一下看有没有对应的操作说明,下面简单总结一下。

二.远程共享目录操作

1、需要下载对应的jcifs-1.3.18.jar,本例子采用3.18版本的,下载链接:https://jcifs.samba.org/

2、涉及的主要类是  SmbFile(远程文件操作类) ,还有就是进行登录验证,验证对应的远程目录的合法性的操作,其他操作就普通的IO流的操作。

3、从远程共享目录下载文件

/**
  * 方法说明:从远程共享目录下载文件
  * @param localDir   本地临时路径
  * @param removeDir  远程共享路径
  * @param _fileName  远程共享文件名
  * @param removeIp   远程共享目录IP
  * @param removeLoginUser 远程共享目录用户名
  * @param removeLoginPass 远程共享目录密码
  * @return
  * @throws Exception
  */
 public static int smbDownload(String localDir, String removeDir,
   String _fileName, String removeIp, String removeLoginUser,
   String removeLoginPass) throws Exception {
  InputStream in = null;
  OutputStream out = null;
  try {
   NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(
     removeIp, removeLoginUser, removeLoginPass);
   SmbFile remoteFile = new SmbFile(removeDir + _fileName, auth);
   if (!remoteFile.exists()) {
    return 0;
   }
   File dir = new File(localDir);
   if (!dir.exists()) {
    dir.mkdirs();
   }
   String fileName = _fileName.substring(_fileName.lastIndexOf("\\")+1, _fileName.length());
   File localFile = new File(localDir + 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 {
    if (null != out) {
     out.close();
    }
   } catch (IOException e) {
    e.printStackTrace();
   } finally {
    if (null != in) {
     try {
      in.close();
     } catch (IOException e) {
      e.printStackTrace();
     }
    }
   }
  }
  return 1;
 }

4、上传文件都远程共享目录

/**
  * 方法说明:上传文件到远程共享目录
  * @param localDir   本地临时路径(A:/测试/测试.xls)
  * @param removeDir  远程共享路径(smb://10.169.2.xx/测试/,特殊路径只能用/)
  * @param removeIp   远程共享目录IP(10.169.2.xx)
  * @param removeLoginUser 远程共享目录用户名(user)
  * @param removeLoginPass 远程共享目录密码(password)
  * @return
  * @throws Exception 0成功/-1失败
  */
 public static int smbUploading(String localDir, String removeDir,
   String removeIp, String removeLoginUser, String removeLoginPass) throws Exception {
  NtlmPasswordAuthentication auth = null;
  OutputStream out = null;
  int retVal = 0; 
  try {
   File dir = new File(localDir);
   if (!dir.exists()) {
    dir.mkdirs();
   }
   InetAddress ip = InetAddress.getByName(removeIp); 
   UniAddress address = new UniAddress(ip);
   // 权限验证
    auth = new NtlmPasswordAuthentication(removeIp, removeLoginUser, removeLoginPass);
   SmbSession.logon(address,auth); 
   //远程路径判断文件文件路径是否合法
   SmbFile remoteFile = new SmbFile(removeDir + dir.getName(), auth);
   remoteFile.connect();  
   if(remoteFile.isDirectory()){ 
    retVal = -1;
   }
   // 向远程共享目录写入文件
   out = new BufferedOutputStream(new SmbFileOutputStream(remoteFile));
   out.write(toByteArray(dir));
  } catch (UnknownHostException e) {
   retVal = -1;
   e.printStackTrace();
  } catch (MalformedURLException e) {
   retVal = -1;
   e.printStackTrace();
  } catch (SmbException e) {
   retVal = -1;
   e.printStackTrace();
  } catch (IOException e) {
   retVal = -1;
   e.printStackTrace();
  } finally{
   if (out != null) {
    try {
     out.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  }
  return retVal;
 }
 /**
  * Mapped File way MappedByteBuffer 可以在处理大文件时,提升性能
  *
  * @param file 文件
  * @return 字节数组
  * @throws IOException IO异常信息
  */
 @SuppressWarnings("resource")
 public static byte[] toByteArray(File file) throws IOException {
  FileChannel fc = null;
  try {
   fc = new RandomAccessFile(file, "r").getChannel();
   MappedByteBuffer byteBuffer = fc.map(MapMode.READ_ONLY, 0,
     fc.size()).load();
   byte[] result = new byte[(int) fc.size()];
   if (byteBuffer.remaining() > 0) {
    byteBuffer.get(result, 0, byteBuffer.remaining());
   }
   return result;
  } catch (IOException e) {
   e.printStackTrace();
   throw e;
  } finally {
   try {
    fc.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
 }

总结

以上所述是小编给大家介绍的Java远程共享目录的操作代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • Java中equals与==的用法和区别

    Java中equals与==的用法和区别

    这篇文章主要给大家介绍了关于Java中equals与==的用法和区别的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • Java调用shell命令涉及管道、重定向时不生效问题及解决

    Java调用shell命令涉及管道、重定向时不生效问题及解决

    这篇文章主要介绍了Java调用shell命令涉及管道、重定向时不生效问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • 基于Springboot疫苗接种行程管理系统的设计与实现

    基于Springboot疫苗接种行程管理系统的设计与实现

    本文主要介绍了基于Springboot实现的疫苗接种行程管理系统的示例代码,系统主要实现个人疫苗接种管理、行程管理、病史管理、风险地区管理、核酸检测报告结果上报、疫情新闻管理等功能,需要的可以参考一下
    2022-03-03
  • 在Java中如何避免创建不必要的对象

    在Java中如何避免创建不必要的对象

    作为Java开发者,我们每天创建很多对象,但如何才能避免创建不必要的对象呢?这需要我们好好学习,这篇文章主要给大家介绍了关于在Java中如何避免创建不必要对象的相关资料,需要的朋友可以参考下
    2021-10-10
  • java实现时间与字符串之间转换

    java实现时间与字符串之间转换

    这篇文章主要为大家详细介绍了java实现时间与字符串之间转换,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • Java Scala之面向对象

    Java Scala之面向对象

    Scala是一门面向对象的语言。在Scala中,一切皆为对象函数是对象,数字也是对象,本文详细介绍了Scala面向对象的原理和介绍,感兴趣的小伙伴可以参考一下
    2023-04-04
  • RestTemplate请求失败自动重启机制精讲

    RestTemplate请求失败自动重启机制精讲

    这篇文章主要为大家介绍了RestTemplate请求失败自定义处理的方法,自动重试的机制精讲,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多所进步,早日升职加薪
    2022-03-03
  • IDEA新建javaWeb以及Servlet简单实现小结

    IDEA新建javaWeb以及Servlet简单实现小结

    这篇文章主要介绍了IDEA新建javaWeb以及Servlet简单实现小结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • java web将数据导出为pdf格式文件代码片段

    java web将数据导出为pdf格式文件代码片段

    这篇文章主要为大家详细介绍了java web将数据导出为pdf格式文件代码片段,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • Spring MVC中JSON数据处理方式实战案例

    Spring MVC中JSON数据处理方式实战案例

    Spring MVC是个灵活的框架,返回JSON数据的也有很多五花八门的方式,下面这篇文章主要给大家介绍了关于Spring MVC中JSON数据处理方式的相关资料,需要的朋友可以参考下
    2024-01-01

最新评论