java 通过 SmbFile 类操作共享文件夹的示例

网友投稿 572 2022-11-04


java 通过 SmbFile 类操作共享文件夹的示例

一、添加依赖

在pom.xml文件夹中添加如下的依赖就可以引用SmbFile类的jar包。

jcifs

jcifs

1.3.17

二、读取文件

/**

* 读取共享文件夹下的所有文件(文件夹)的名称

* @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 (http://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 + Fhttp://ile.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();

}

}

删除文件夹将路径指向要删除的文件夹即可。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:oracle的日期蛋
下一篇:密码过期导致Oracle process耗尽问题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~