使用JCIFS获取远程共享文件
文件 远程 获取 共享 使用
2023-09-11 14:19:23 时间
- package com.jadyer.util;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileInputStream;
/**
* 使用JCIFS获取远程共享文件
* @see 关于jcifs的介绍,网上有一大片,这里谈到的远程文件指的是网络共享文件
* @see JCIFS官网为http://jcifs.samba.org/,以后准备写成一个工具类,故命名JCifsUtil
* @see 据网络所说:JCIFS比较适用于单域环境,多域环境就会很麻烦(本人尚未验证),详见http://jusescn.iteye.com/blog/757475
* @create Apr 22, 2013 11:48:15 PM
* @author 玄玉<http://blog.csdn.net/jadyer>
*/
public class JCifsUtil {
public static void main(String[] args) {
getRemoteFile("jadyer", "myJavaSE", "192.168.8.2/我的测试用例/", "D:/mylocal/");
//getRemoteFile("jadyer", "myJavaSE", "192.168.8.2/我的测试用例/平安银行接入.et", "D:/mylocal/");
System.out.println(System.getenv("JAVA_HOME"));
}
/**
* 拷贝远程文件到本地目录
* @param smbFile 远程SmbFile
* @param localDirectory 本地存储目录,本地目录不存在时会自动创建,本地目录存在时可自行选择是否清空该目录下的文件,默认为不清空
* @return boolean 是否拷贝成功
*/
private static boolean copyRemoteFile(SmbFile smbFile, String localDirectory) {
SmbFileInputStream in = null;
FileOutputStream out = null;
try {
File[] localFiles = new File(localDirectory).listFiles();
if(null == localFiles){
//目录不存在的话,就创建目录
//new File("D:/aa/bb.et").mkdirs()会在aa文件夹下创建一个名为bb.et的文件夹
new File(localDirectory).mkdirs();
}else if(localFiles.length > 0){
// for(File file : localFiles){
// //清空本地目录下的所有文件
// //new File("D:/aa/bb.et").delete()会删除bb.et文件,但aa文件夹还存在
// file.delete();
// }
}
in = new SmbFileInputStream(smbFile);
out = new FileOutputStream(localDirectory + smbFile.getName());
byte[] buffer = new byte[1024];
int len = -1;
while((len=in.read(buffer)) != -1){
out.write(buffer, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
if(null != out){
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(null != in){
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return true;
}
/**
* 获取远程文件
* @param remoteUsername 远程目录访问用户名
* @param remotePassword 远程目录访问密码
* @param remoteFilepath 远程文件地址,该参数需以IP打头,如'192.168.8.2/aa/bb.java'或者'192.168.8.2/aa/',如'192.168.8.2/aa'是不对的
* @param localDirectory 本地存储目录,该参数需以'/'结尾,如'D:/'或者'D:/mylocal/'
* @return boolean 是否获取成功
*/
public static boolean getRemoteFile(String remoteUsername, String remotePassword, String remoteFilepath, String localDirectory) {
boolean isSuccess = false;
if(remoteFilepath.startsWith("/") || remoteFilepath.startsWith("\\")){
return isSuccess;
}
if(!(localDirectory.endsWith("/") || localDirectory.endsWith("\\"))){
return isSuccess;
}
try {
SmbFile smbFile = new SmbFile("smb://" + remoteUsername + ":" + remotePassword + "@" + remoteFilepath);
if(smbFile.isDirectory()){
for(SmbFile file : smbFile.listFiles()){
isSuccess = copyRemoteFile(file, localDirectory);
}
}else if(smbFile.isFile()){
isSuccess = copyRemoteFile(smbFile, localDirectory);
}
} catch (Exception e) {
e.printStackTrace();
}
return isSuccess;
}
}
相关文章
- 安全之路 —— 无DLL文件实现远程进程注入
- redis如何生成rdb文件?
- 通过cpolar内网穿透远程访问内网共享文件(Mac OS用户)
- scp -P -R 远程复制文件(夹) 到 指定端口 指定服务器 指定 目录
- Ubuntu SSH连接、远程上传下载文件
- python filecmp模块文件差异对比详解
- Windows 禁用 security center,Windows Defender,打开文件安全警告, 切换到系统到英文,修改日期格式,禁用自动更新
- 报错:未能加载文件或程序集“WebGrease, Version=1.5.1.25624, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)
- 定时获取远程文件并存储更新记录
- CVE-2020-13957: Apache Solr ConfigSet 文件上传漏洞通告
- 《SAS 统计分析与应用从入门到精通(第二版)》一1.4 SAS系统的文件管理
- SVG-Android开源库——SVG生成Vector资源文件的编辑预览工具
- VUE+servlet上传多文件实践
- JCIFS读取远程服务器文件过慢的解决方法
- nodejs基础(管道、流)实现:复制、压缩、加密、解压,解密,写入文件
- 浅析关于webpack5模块联邦构建过程理解:3个重要概念理解(webpack构建产生资源包、remote暴露模块、host消费)、host与remote两个角色的依赖关系、案例解析(暴露模块生成的各文件意思、对应项目加载对应组件、所需资源分离)、基本原理(先加载远程依赖再加载本地依赖)
- rsync 删除大量小文件
- 【Git 问题及解决方案】本地删除某些文件后,远程仓库也实现删除的方法
- windows通过使用xShell远程linux上传文件
- C#.Net遍历远程文件夹下的所有文件 FTP
- C#.Net遍历远程文件夹下的所有文件 FTP
- git远程上传文件
- PHP文件函数