JAVA实现上传下载共享文件

1、上传下载共享文件需要用到jcifs,先下载相关JAR包(开源项目的源码,demo,文挡、API应有尽有)

https://jcifs.samba.org/src/

2、创建共享目录,确定访问用户及密码(用户需要写入权限)

String url_share_key = "192.16.20.15"; //共享IP
String url_share_user = "administrator"; //共享用户 需要有写入权限
String url_share_pwd = "123456"; //密码
String dir_share_key = "192.16.20.15/test/"; //共享根路径

3、用户凭证,用户凭证还可以通过远程路径传递(smb://用户名:密码@192.168.0.11/test )

NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(url_share_key, url_share_user, url_share_pwd); 

4、上传

 1    /**
 2      * 从本地上传文件到共享目录
 3      * @param remoteUrl 远程路径
 4      * @param localFilePath 本地路径
 5      * @param auth 用户凭证
 6      */
 7     public static void smbPut(String remoteUrl, String localFilePath,NtlmPasswordAuthentication auth) {
 8         InputStream in = null;
 9         OutputStream out = null;
10         try {
11             // 需要上传的文件 取出文件名称
12             File localFile = new File(localFilePath);
13             String fileName = localFile.getName();
14 
15             // 共享目录 不存在则创建
16             SmbFile remoteFileDir = new SmbFile(remoteUrl, auth);
17             if (!remoteFileDir.isDirectory()) {
18                 remoteFileDir.mkdirs();
19             }
20 
21             // 上传
22             SmbFile remoteFile = new SmbFile(remoteUrl + File.separator
23                     + fileName, auth);
24             in = new BufferedInputStream(new FileInputStream(localFile));
25             out = new BufferedOutputStream(new SmbFileOutputStream(remoteFile));
26 
27             // 缓冲数组
28             byte[] b = new byte[1024 * 5];
29             int len;
30             while ((len = in.read(b)) != -1) {
31                 out.write(b, 0, len);
32             }
33             // 刷新此缓冲的输出流
34             out.flush();
35         } catch (Exception e) {
36             e.printStackTrace();
37         } finally {
38             try {
39                 out.close();
40                 in.close();
41             } catch (IOException e) {
42                 e.printStackTrace();
43             }
44         }
45     }

5、下载

 1   /**
 2      * 从共享目录拷贝文件到本地
 3      * @param remoteUrl 远程路径
 4      * @param localDir 本地路经
 5      * @param auth
 6      */
 7     public static void smbGet(String remoteUrl, String localDir,NtlmPasswordAuthentication auth) {
 8         InputStream in = null;
 9         OutputStream out = null;
10         try {
11             //远程文件
12             SmbFile remoteFile = new SmbFile(remoteUrl,auth);
13             if (remoteFile == null) {
14                 System.out.println("共享文件不存在");
15                 return;
16             }
17             
18             //创建本地文件并写入
19             String fileName = remoteFile.getName();
20             File localFile = new File(localDir + File.separator + fileName);
21             in = new BufferedInputStream(new SmbFileInputStream(remoteFile));
22             out = new BufferedOutputStream(new FileOutputStream(localFile));
23             byte[] buffer = new byte[1024];
24             while (in.read(buffer) != -1) {
25                 out.write(buffer);
26                 buffer = new byte[1024];
27             }
28         } catch (Exception e) {
29             e.printStackTrace();
30         } finally {
31             try {
32                 out.close();
33                 in.close();
34             } catch (IOException e) {
35                 e.printStackTrace();
36             }
37         }
38     }
原文地址:https://www.cnblogs.com/Nadim/p/4800859.html