JAVA读取局域网电脑文件全流程
- 需求
- 设计
- 实现
- 1、创建非微软用户
- (1)win11
- 不可达电脑开启网络共享
- 2、设置文件夹共享
- 3、高级共享设置打开文件夹与打印机共享
- 3、java编码
需求
需要读取内网一台电脑中的文件并解析数据,但机器不可接入办公网,服务无法直接访问
设计
实现
1、创建非微软用户
(1)win11
不可达电脑开启网络共享
2、设置文件夹共享
3、高级共享设置打开文件夹与打印机共享
3、java编码
此处借鉴另一篇博文 java 读取另外一台局域网机器上的文件
- 注意点1:如何确认共享文件夹网络路径
1、先通过win+r 通过windows运行访问主机ip
2、找到刚才共享的文件夹
3、进入并查看文件属性
确认第一步的用户在“组或用户名”
记住对象名称 \10.59.9.216\123\CA261723.qan,这是正确网络路径
博文中使用的是访问文件夹,所以我们将最后的文件名和路径省略
最终代码中的 remoteUrl = “smb://User1:199852@10.59.9.216/123/”
package com.example.demo.util;
import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileInputStream;
import java.io.*;
public class SmbUtil {
public static void main(String[] args) {
getRemoteFile();
}
public static void getRemoteFile() {
InputStream in = null;
try {
// 创建远程文件对象
// smb://ip地址/共享的路径/...
// smb://用户名:密码@ip地址/共享的路径/...
String remoteUrl = "smb://User1:199716@10.59.9.216/123/";
SmbFile remoteFile = new SmbFile(remoteUrl);
remoteFile.connect();//尝试连接
if (remoteFile.exists()) {
// 获取共享文件夹中文件列表
SmbFile[] smbFiles = remoteFile.listFiles();
for (SmbFile smbFile : smbFiles) {
createFile(smbFile);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void createFile(SmbFile remoteFile) {
InputStream in = null;
OutputStream out = null;
try {
File localFile = new File("D:/file/" + remoteFile.getName());
in = new BufferedInputStream(new SmbFileInputStream(remoteFile));
out = new BufferedOutputStream(new FileOutputStream(localFile));
byte[] buffer = new byte[4096];
//读取长度
int len = 0;
while ((len = in.read(buffer, 0, buffer.length)) != -1) {
out.write(buffer, 0, len);
}
out.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (out != null) {
out.close();
}
if (in != null) {
in.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}