java 通过 SmbFile 类操作共享文件夹的示例
时间:2021-06-17 09:17:20|栏目:JAVA代码|点击: 次
一、添加依赖
在pom.xml文件夹中添加如下的依赖就可以引用SmbFile类的jar包。
<dependency> <groupId>jcifs</groupId> <artifactId>jcifs</artifactId> <version>1.3.17</version> </dependency>
二、读取文件
/**
* 读取共享文件夹下的所有文件(文件夹)的名称
* @param remoteUrl
*/
public static void 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());
}
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (SmbException e) {
e.printStackTrace();
}
}
三、创建文件夹
/**
* 创建文件夹
* @param remoteUrl
* @param folderName
* @return
*/
public static void smbMkDir(String remoteUrl, String folderName) {
SmbFile smbFile;
try {
// smb://userName:passWord@host/path/folderName
smbFile = 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/fileName
SmbFile 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 shareFolderPath, String fileName) {
SmbFile smbFile;
SmbFileInputStream smbFileInputStream = null;
OutputStream outputStream = null;
try {
// smb://userName:passWord@host/path/shareFolderPath/fileName
smbFile = new SmbFile(remoteUrl + shareFolderPath + "/" + 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 shareFolderPath, String fileName, String localDir) {
InputStream in = null;
OutputStream out = null;
try {
SmbFile remoteFile = new SmbFile(remoteUrl + shareFolderPath + File.separator + 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/fileName
SmbFile = new SmbFile(remoteUrl + shareFolderPath + "/" + fileName);
if (SmbFile.exists()) {
SmbFile.delete();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (SmbException e) {
e.printStackTrace();
}
}
删除文件夹将路径指向要删除的文件夹即可。
上一篇:详解Spring Cloud Netflix Zuul中的速率限制
栏 目:JAVA代码
下一篇:SpringBoot集成WebSocket长连接实际应用详解
本文标题:java 通过 SmbFile 类操作共享文件夹的示例
本文地址:http://www.codeinn.net/misctech/143302.html


阅读排行
- 1Java Swing组件BoxLayout布局用法示例
- 2java中-jar 与nohup的对比
- 3Java邮件发送程序(可以同时发给多个地址、可以带附件)
- 4Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type异常
- 5Java中自定义异常详解及实例代码
- 6深入理解Java中的克隆
- 7java读取excel文件的两种方法
- 8解析SpringSecurity+JWT认证流程实现
- 9spring boot里增加表单验证hibernate-validator并在freemarker模板里显示错误信息(推荐)
- 10深入解析java虚拟机




