1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > java读取局域网共享文件夹中文件并保存到本地文件夹

java读取局域网共享文件夹中文件并保存到本地文件夹

时间:2018-10-28 10:15:59

相关推荐

java读取局域网共享文件夹中文件并保存到本地文件夹

在磁盘新建一个文件夹,右击文件夹属性,点击共享

点击网络和共享中心

设置文件夹可访问权限

到此就可以用本地ip加文件夹名称访问了,同局域网也可以通过改地址访问

文件夹的名称来自这张图的 网络路径

如果需要通过java的jcifs包访问请继续

这一步开启SMB1和服务器协议配置

命令查看是否开启

Get-SmbServerConfiguration | Select EnableSMB1Protocol, EnableSMB2Protocol

可以看出当前服务器SMB1未开启,尝试开启SMB1,

在powershell控制台输入:

Set-SmbServerConfiguration -EnableSMB1Protocol $true

报错,指定服务不存在,所以当前的服务器不支持SMB1,到此,原因找到了,因为本地使用的机器支持SMB1所以可以正常运行jcifs的功能,但是正式环境的服务器不支持SMB1,所以报错

我试了几台电脑都报错,所以只能通过控制面板开启,如下图:点击确定后需要重启生效

java项目 maven 引入

<!--java 通过 SmbFile 类操作共享文件夹--><dependency><groupId>jcifs</groupId><artifactId>jcifs</artifactId><version>1.3.17</version></dependency>

以下代码来自他人博客,略作修改,读取和下载文件是可用的,其他未测试

import jcifs.smb.SmbException;import jcifs.smb.SmbFile;import jcifs.smb.SmbFileInputStream;import jcifs.smb.SmbFileOutputStream;import javax.servlet.http.HttpServletResponse;import java.io.*;import .MalformedURLException;import .URLEncoder;import .UnknownHostException;/*** java 通过 SmbFile 类操作共享文件夹*/public class SmbFileUtil {/*** 读取共享文件夹下的所有文件(文件夹)的名称** @param remoteUrl*/public static SmbFile[] getSharedFileList(String remoteUrl) {SmbFile smbFile;try {// smb://userName:passWord@host/path/smbFile = new SmbFile(remoteUrl);if (!smbFile.exists()) {System.out.println("no such folder");} else {SmbFile[] files = smbFile.listFiles();//for (SmbFile f : files) {//System.out.println(f.getName() + f.getDate());//}return files;}} catch (MalformedURLException e) {e.printStackTrace();} catch (SmbException e) {e.printStackTrace();}return null;}/*** 创建文件夹** @param remoteUrl* @param folderName* @return*/public static void smbMkDir(String remoteUrl, String folderName) {SmbFile smbFile;try {// smb://userName:passWord@host/path/folderNamesmbFile = new SmbFile(remoteUrl + folderName);if (!smbFile.exists()) {smbFile.mkdir();}} catch (MalformedURLException e) {e.printStackTrace();} catch (SmbException e) {e.printStackTrace();}}/*** 上传文件** @param remoteUrl* @param shareFolderPath* @param localFilePath* @param fileName*/public static void uploadFileToSharedFolder(String remoteUrl, String shareFolderPath, String localFilePath, String fileName) {InputStream inputStream = null;OutputStream outputStream = null;try {File localFile = new File(localFilePath);inputStream = new FileInputStream(localFile);// smb://userName:passWord@host/path/shareFolderPath/fileNameSmbFile smbFile = new SmbFile(remoteUrl + shareFolderPath + "/" + fileName);smbFile.connect();outputStream = new SmbFileOutputStream(smbFile);byte[] buffer = new byte[4096];int len = 0; // 读取长度while ((len = inputStream.read(buffer, 0, buffer.length)) != -1) {outputStream.write(buffer, 0, len);}// 刷新缓冲的输出流outputStream.flush();} catch (FileNotFoundException e) {e.printStackTrace();} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {outputStream.close();inputStream.close();} catch (IOException e) {e.printStackTrace();}}}/*** 下载文件到浏览器** @param httpServletResponse* @param remoteUrl* @param shareFolderPath* @param fileName*/public static void downloadFileToBrowser(HttpServletResponse httpServletResponse, String remoteUrl , String fileName) {SmbFile smbFile;SmbFileInputStream smbFileInputStream = null;OutputStream outputStream = null;try {// smb://userName:passWord@host/path/shareFolderPath/fileNamesmbFile = new SmbFile(remoteUrl + "/" + fileName);smbFileInputStream = new SmbFileInputStream(smbFile);httpServletResponse.setHeader("content-type", "application/octet-stream");httpServletResponse.setContentType("application/vnd.ms-excel;charset=UTF-8");httpServletResponse.setHeader("Content-disposition", "attachment; filename=" + fileName);// 处理空格转为加号的问题httpServletResponse.setHeader("Content-Disposition", "attachment; fileName=" + fileName + ";filename*=utf-8''" + URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20"));outputStream = httpServletResponse.getOutputStream();byte[] buff = new byte[2048];int len;while ((len = smbFileInputStream.read(buff)) != -1) {outputStream.write(buff, 0, len);}} catch (MalformedURLException e) {e.printStackTrace();} catch (SmbException e) {e.printStackTrace();} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {outputStream.close();smbFileInputStream.close();} catch (IOException e) {e.printStackTrace();}}}/*** 下载文件到指定文件夹** @param remoteUrl* @param shareFolderPath* @param fileName* @param localDir*/public static void downloadFileToFolder(String remoteUrl, String fileName, String localDir) {InputStream in = null;OutputStream out = null;try {SmbFile remoteFile = new SmbFile(remoteUrl + "/" + fileName);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();}}}/*** 删除文件** @param remoteUrl* @param shareFolderPath* @param fileName*/public static void deleteFile(String remoteUrl, String shareFolderPath, String fileName) {SmbFile SmbFile;try {// smb://userName:passWord@host/path/shareFolderPath/fileNameSmbFile = new SmbFile(remoteUrl + shareFolderPath + "/" + fileName);if (SmbFile.exists()) {SmbFile.delete();}} catch (MalformedURLException e) {e.printStackTrace();} catch (SmbException e) {e.printStackTrace();}}}

业务实现代码

FileUtil.isFile来自cn.hutool.core.io (hutool包),判断文件是否存在的

upLoadPath 是本地地址的文件夹路径

代码意思就是读取共享文件夹的文件,然后下载保存到本地地址

@GetMapping(value = "/getSmbFile")public Result<?> getSmbFile(HttpServletResponse httpServletResponse) {SmbFile[] files = SmbFileUtil.getSharedFileList("smb://10.10.41.53/可选性曲线图片/");SmbFile smbFile = files[files.length - 1];boolean bo = FileUtil.isFile(new File(upLoadPath+"\\"+smbFile.getName()));if (!bo){SmbFileUtil.downloadFileToFolder("smb://10.10.41.53/可选性曲线图片/", smbFile.getName(), upLoadPath);}return Result.ok(smbFile.getName());}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。