您的位置:首页 > 编程语言 > Java开发

java下载上传远程文件

2018-03-09 09:51 459 查看

利用的是SMB协议从远程服务器下载上传文件

可以在本地做一个共享文件夹放点东西来测试下

这是用到的jar包[jcifs-1.2.3.jar],不能设置0积分有点可惜。(https://download.csdn.net/download/qq_39019865/10276986)

package com.yss.test.FileReadWriter;

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 jcifs.smb.SmbFile;
import jcifs.smb.SmbFileInputStream;
import jcifs.smb.SmbFileOutputStream;

public class RemoteAccessData {

/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
smbGet1("smb://192.168.75.204/test/新建 文本文档.txt");
smbGet("smb://192.168.75.204/test/新建 文本文档.txt","e:/");
}

/**
* 方法一:
*
* @param remoteUrl
*            远程路径 smb://192.168.75.204/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.75.204/test/新建 文本文档.txt
*              smb://username:password@192.168.0.77/test
* @param remoteUrl
*            远程路径
* @param localDir
*            要写入的本地路径
*/
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();
}
}
}

// 向共享目录上传文件
public static void smbPut(String remoteUrl, String localFilePath) {
InputStream in = null;
OutputStream out = null;
try {
File localFile = new File(localFilePath);

String fileName = localFile.getName();
SmbFile remoteFile = new SmbFile(remoteUrl + "/" + fileName);
in = new BufferedInputStream(new FileInputStream(localFile));
out = new BufferedOutputStream(new SmbFileOutputStream(remoteFile));
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();
}
}
}

// 远程url smb://192.168.0.77/test
// 如果需要用户名密码就这样:
// smb://username:password@192.168.0.77/test

}


如果是下载上传远程文件夹的话,需要把文件夹遍历一下,路径也需要修改,smbGet的最后要加“/”

// 从共享目录下载文件夹
/**
* 方法二:
*  smbGet("smb://tom:123@192.168.0.87/datatrans/price/","f:/");
* @param remoteUrl
*            远程路径
* @param localDir
*            要写入的本地路径
*/
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;
}
SmbFile[] files = remoteFile.listFiles();
for (SmbFile smbFile : files) {
String fileName = smbFile.getName();
File localFile = new File(localDir + File.separator + fileName);
in = new BufferedInputStream(new SmbFileInputStream(remoteFile+fileName));
out = new BufferedOutputStream(new FileOutputStream(localFile));
byte[] buffer = new byte[1024];
while (in.read(buffer) != -1) {
out.write(buffer);
buffer = new byte[1024];
}
}
System.out.println("完成");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
out.close();
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

// 向共享目录上传文件
public static void smbPut(String remoteUrl, String localFilePath) {
InputStream in = null;
OutputStream out = null;
try {
File localFile = new File(localFilePath);

String fileName = localFile.getName();
SmbFile remoteFile = new SmbFile(remoteUrl + "/" + fileName);
in = new BufferedInputStream(new FileInputStream(localFile));
out = new BufferedOutputStream(new SmbFileOutputStream(remoteFile));
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();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息