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

时间:2022-04-24 15:44:41

本文实例为大家分享了java利用SMB读取远程文件的具体代码,供大家参考,具体内容如下

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
package com.yss.test.FileReadWriter;
 
import java.io.BufferedInputStream;
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.net.MalformedURLException;
 
import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileInputStream;
import jcifs.smb.SmbFileOutputStream;
 
public class RemoteAccessData {
 
 /**
  * @param args
  * @throws IOException
  */
 public static void main(String[] args) throws IOException {
  smbGet1("smb://192.168.75.204/test/新建 文本文档.txt");
  smbGet("smb://192.168.75.204/test/新建 文本文档.txt","e:/");
 }
 
 /**
  * 方法一:
  *
  * @param remoteUrl
  *   远程路径 smb://192.168.75.204/test/新建 文本文档.txt
  * @throws IOException
  */
 public static void smbGet1(String remoteUrl) throws IOException {
  SmbFile smbFile = new SmbFile(remoteUrl);
  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();
 }
 
 // 从共享目录下载文件
 /**
  * 方法二:
  * 路径格式:smb://192.168.75.204/test/新建 文本文档.txt
  *    smb://username:password@192.168.0.77/test
  * @param remoteUrl
  *   远程路径
  * @param localDir
  *   要写入的本地路径
  */
 public static void smbGet(String remoteUrl, String localDir) {
  InputStream in = null;
  OutputStream out = null;
  try {
   SmbFile remoteFile = new SmbFile(remoteUrl);
   if (remoteFile == null) {
    System.out.println("共享文件不存在");
    return;
   }
   String fileName = remoteFile.getName();
   File localFile = new File(localDir + File.separator + 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 {
    out.close();
    in.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
 }
 
 // 向共享目录上传文件
 public static void smbPut(String remoteUrl, String localFilePath) {
  InputStream in = null;
  OutputStream out = null;
  try {
   File localFile = new File(localFilePath);
 
   String fileName = localFile.getName();
   SmbFile remoteFile = new SmbFile(remoteUrl + "/" + 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();
   }
  }
 }
 
 // 远程url smb://192.168.0.77/test
 // 如果需要用户名密码就这样:
 // smb://username:password@192.168.0.77/test
 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/z69183787/article/details/14161109