java smb跨服务器_java SmbFile 读取服务器间的共享文件

这篇博客展示了如何使用Java的jcifs库进行SMB操作,包括跨服务器读取、下载、删除和获取远程共享文件的大小。通过SmbFile类,实现了与192.168.100.86和192.168.70.190服务器之间的文件交互功能。
摘要由CSDN通过智能技术生成

package com;

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.MalformedURLException;

import java.util.ArrayList;

import java.util.List;

import java.util.Map;

import jcifs.smb.SmbException;

import jcifs.smb.SmbFile;

import jcifs.smb.SmbFileInputStream;

import jcifs.smb.SmbFileOutputStream;

public class RemoteAccessData {

public static void main(String[] args) throws Exception {

// 远程url smb://192.168.100.86/test

// 如果需要用户名密码就这样:

// smb://username:password@192.168.100.86/test

/*

* Java利用SMB上传、下载、读取(内容或文件名)、复制、删除远程文件

* smbGet1("smb://192.168.100.86/test/新建 文本文档.txt" ); smbGet(

* "smb://192.168.100.86/test/新建 文本文档.txt" , "e:/" );

* 需要jar包:jcifs-1.3.15.jar

*/

// 得到共享目录下文件的大小 (测试成功)

//smbGet1("smb://10086:10086@192.168.100.86/ybweatherweb/2-各类服务产品/23-专业服务产品/移动部门/2017/移动部门(20170411).doc");

// 从共享目录下载指定文件到本地指定路径 (测试成功)

//1.测试

for (int i = 1; i < 11; i++) {

smbGet("smb://192.168.70.190/public/010-0127111111-01-03-06.jpg", "E:/sharepublic/");

//   smbDelete("smb://192.168.70.190/public/"+i+".txt");

}

//2.测试

String URL = "smb://192.168.70.190/public/";

smbRead(URL);

// 上传文件到共享目录 (测试成功)

//smbPut("smb://10086:10086@192.168.100.86/ybweatherweb/2-各类服务产品/23-专业服务产品/移动部门/2017", "F:/4/");

// 把共享目录指定文件夹下的文件拷贝到另外一个共享目录指定文件夹下(目录文件夹不存在,就创建) (测试成功)

//smbCopy("192.168.100.86/ybweatherweb/2-各类服务产品/1-气象信息快报/每日天气报告/2017/草稿/", "192.168.100.86/ybweatherweb/2-各类服务产品/1-气象信息快报/每日天气报告/2017/审核后/");

// 读取指定文件夹下的所有文件名(测试成功)

//smbRead();

// 删除共享目录下的指定文件(测试成功)

//smbDelete();

// 远程url smb://192.168.100.86/test

// 如果需要用户名密码就这样:

// smb://username:password@192.168.100.86/test

}

private static void smbRead(String URL) throws MalformedURLException {

// 主要利用类 SmbFile 去实现读取共享文件夹 shareFile 下的所有文件(文件夹)的名称

//  String URL = "smb://192.168.70.190/public/";

// String URL="smb://xxx:xxx@192.168.0.100/shareFile/";

SmbFile smbfile = new SmbFile(URL);

List list = new ArrayList();

try {

if (!smbfile.exists()) {

System.out.println("no such folder");

} else {

SmbFile[] files = smbfile.listFiles();

for (SmbFile f : files) {

if(f.isFile()){

list.add(f.getPath());

}else{

smbRead(f.getPath());

}

/*System.out.println(f.getName());

System.err.println("1=========================================");

System.err.println("1=="+f.getURL());

System.err.println("2=="+f.getPath());

System.err.println("3=="+f.getCanonicalPath());

System.err.println("1=========================================22222");*/

}

}

} catch (SmbException e) {

e.printStackTrace();

}

for (int i = 0; i < list.size(); i++) {

System.err.println(list.get(i));

}

}

/**

* 方法四:把共享目录指定文件夹下的文件拷贝到另外一个共享目录指定文件夹下 (测试成功)

*

* @param rpath

*            指定共享目录文件夹的路径一

* @param rpath1

*            指定共享目录文件夹的路径二

* @throws IOException

*/

private static void smbCopy(String rpath, String rpath1) throws IOException {

// rpath =

// "192.168.100.86/ybweatherweb/2-各类服务产品/1-气象信息快报/每日天气报告/"+yyyy+"/草稿/";

// rpath1 =

// "192.168.100.86/ybweatherweb/2-各类服务产品/1-气象信息快报/每日天气报告/"+yyyy+"/审核后/";

String filename = "测试.docx";

String username = "10086";

String pwd = "10086";

SmbFile f = new SmbFile("smb://" + username + ":" + pwd + "@" + rpath

+ filename);

SmbFile f1 = new SmbFile("smb://" + username + ":" + pwd + "@" + rpath1);

if (!f1.exists()) { // 目录文件夹不存在,就创建

f1.mkdirs();

}

if (f.exists() && f.isFile()) {

SmbFile fa1 = new SmbFile("smb://" + username + ":" + pwd + "@"

+ rpath1 + f.getName());

f.copyTo(fa1);

}

}

/**

* 方法一: \\192.168.100.86\ybweatherweb\2-各类服务产品\23-专业服务产品\虎门部队\2017

*

* @param remoteUrl

*            远程路径 smb://192.168.100.86/test/新建 文本文档.txt

* @throws IOException

*/

public static void smbGet1(String remoteUrl) throws IOException {

SmbFile smbFile = new SmbFile(remoteUrl);

int length = smbFile.getContentLength(); // 得到文件的大小

byte buffer[] = new byte[length];

SmbFileInputStream in = new SmbFileInputStream(smbFile);

// 建立smb文件输入流

while ((in.read(buffer)) != -1) {

System.out.write(buffer); // 这个打印到控制台乱码,未解决;

System.out.println(buffer.length);

}

in.close();

}

// 从共享目录下载文件

/**

* 方法二: 路径格式:smb://192.168.100.86/test/新建 文本文档.txt

* smb://username:password@192.168.100.86/test

*

* @param remoteUrl

*            远程路径

* @param localDir

*            要写入的本地路径

*/

@SuppressWarnings("unused")

public static void smbGet(String remoteUrl, String localDir) {

InputStream in = null;

OutputStream out = null;

try {

SmbFile remoteFile = new SmbFile(remoteUrl);

if (remoteFile == null) {

System.out.println("共享文件不存在");

return;

}

String fileName = remoteFile.getName();

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();

}

}

}

// 删除共享目录中指定文件

private static void smbDelete(String url) throws Exception {

//String url = "smb://10086:10086@192.168.100.86/ybweatherweb/2-各类服务产品/23-专业服务产品/移动部门/2017/test.txt";

SmbFile file = new SmbFile(url);

if (file.exists()) {

file.delete();

System.out.println("删除文件成功!");

}

}

// 向共享目录上传文件

public static void smbPut(String remoteUrl, String localFilePath)

throws Exception {

String url_local = "F://test.txt";

String URL_remote = "smb://10086:10086@192.168.100.86/2-各类服务产品/23-专业服务产品/移动部队/2017/test.txt";

File localfile = new File(url_local);

InputStream ins = new FileInputStream(localfile);

SmbFile smbfile = new SmbFile(URL_remote);

if (smbfile.exists()) {

System.out.println("file is exists");

} else {

smbfile.connect();

OutputStream outs = new SmbFileOutputStream(smbfile);

byte[] buffer = new byte[4096];

int len = 0; // 读取长度

while ((len = ins.read(buffer, 0, buffer.length)) != -1) {

outs.write(buffer, 0, len);

}

outs.flush(); // 刷新缓冲的输出流

System.out.println("写入成功");

}

// 注意SmbFile本来就不稳定,一定要注意把所有的流关闭啊。try-catch挺烦的,用IDE自己生成吧!

}

}

​//此文档属于转载文章,时间长了找不到原创连接,记录下来作为收藏,分享。非常感谢原创

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值