1.jar包
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.53</version>
</dependency>
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.5</version>
</dependency>
ftp使用commons-net包
sftp使用jcraft包
3.连接工具
xftp
ssh
4.写ftp配置连接信息配置文件(ftp.properties)
host=主机名
port=端口号
username=用户
password=密码
dir=工作目录
5.编写接口
/**
* 连接服务器
*/
void getConnectService();
/*
* 上传
*/
void fileUpLoad(String url) throws Exception;
/**
* 下载
*
* @param url 文件路径
*/
void fileDown(String url, String localpath) throws Exception;
/**
* 获取文件列表
* @return
* @throws Exception
*/
List<String> getFileList() throws Exception;
/**
* 释放资源
*/
void destroy();
6.连接服务器
public void getConnectService() {
JSch jSch = new JSch();
try {
session = jSch.getSession(getConnParams("username"),
getConnParams("host"),
Integer.parseInt(getConnParams("port")));
session.setPassword(getConnParams("password").getBytes());
session.setConfig("StrictHostKeyChecking", "no");
session.connect(10000);
serverDir = getConnParams("dir");
} catch (JSchException e) {
e.printStackTrace();
}
}
7.从连接中获取chanel通道,用户传输数据
channel channel = session.openChannel("sftp");
sftp协议需要将通道转换为ChannelSftp类型
sftp = (ChannelSftp) channel;
8.上传文件
public void fileUpLoad(String url) throws Exception {
File file = new File(url);
if (!file.exists()) {
return;
}
// 打开通道
channel = session.openChannel("sftp");
channel.connect(10000);
sftp = (ChannelSftp) channel;
sftp.setFilenameEncoding("UTF-8");
sftp.cd(serverDir);
// 打开输出流,上传文件,制定路径和文件名称
InputStream in = new FileInputStream(file);
sftp.put(in, file.getName());
sftp.rename(file.getName(), rename());
destroy();
}
9.下载文件
public void fileDown(String url, String localpath) throws Exception {
channel = session.openChannel("sftp");
channel.connect(10000);
ChannelSftp sftp = (ChannelSftp) channel;
sftp.setFilenameEncoding("UTF-8");
// 解决编码问题
OutputStream writer = new FileOutputStream(new File(localpath));
sftp.get(serverDir + url, writer);
writer.flush();
writer.close();
destroy();
}
10.获取文件列表
public List<String> getFileList() throws Exception {
List<String> list = new ArrayList<String>();
channel = session.openChannel("sftp");
channel.connect(10000);
sftp = (ChannelSftp) channel;
Vector<ChannelSftp> vector = sftp.ls(serverDir);
for (Object obj : vector) {
if(obj instanceof ChannelSftp.LsEntry){
String fileName = ((LsEntry) obj).getFilename();
list.add(fileName);
}
}
return list;
}
11.释放资源
public void destroy() {
if (session != null) {
session.disconnect();
}
if (channel != null) {
channel.disconnect();
}
}
从这个内容上看,经验就是还要靠自己多研究,看源码有难度就看api,多尝试方法解决