ChannelSftp类是JSch实现SFTP核心类,它包含了所有SFTP的方法,如:
put(): 文件上传
get(): 文件下载
cd(): 进入指定目录
ls(): 得到指定目录下的文件列表
rename(): 重命名指定文件或目录
rm(): 删除指定文件
mkdir(): 创建目录
rmdir(): 删除目录
/**
* 文件上传
* @param basePath SFTP服务器上传的目录
* @param fileName 文件名
* @param input 输入流
* @throws Exception
*/
public boolean upload(String directory,String fileName, InputStream input) throws Exception {
try{
sftp.cd(directory); //进入目录
}catch(SftpException sException){
if(sftp.SSH_FX_NO_SUCH_FILE == sException.id){ //指定上传路径不存在
sftp.mkdir(directory);//创建目录
sftp.cd(directory); //进入目录
}
}
boolean flag = true;
try {
sftp.put(input, fileName); //上传文件
} catch (Exception e) {
flag = false;
e.printStackTrace();
}
return flag;
}
/**
* 如果SFTP器配置Nginx,可通过URL路径直接下载文件
* @param url 文件访问路径
* @param realName 文件名称
* @param request
* @param response
* @throws IOException
*/
public void fileDownNg(String url, String realName, HttpServletRequest request, HttpServletResponse response) throws IOException {
BufferedInputStream dis = null;
BufferedOutputStream fos = null;
try {
String srtname = url.substring(url.lastIndexOf("/") + 1);
url = url.substring(0,url.lastIndexOf("/"))+"/"+URLEncoder.encode(srtname,"utf-8");
URL httpUrl = new URL(url);
response.setContentType("application/x-msdownload;");
response.setHeader("Content-disposition", "attachment; filename=" + new String(realName.getBytes("UTF-8"), "ISO-8859-1"));
response.setHeader("Content-Length", String.valueOf(httpUrl.openConnection().getContentLength()));
dis = new BufferedInputStream(httpUrl.openStream());
fos = new BufferedOutputStream(response.getOutputStream());
byte[] buff = new byte[1024];
int bytesRead;
while (-1 != (bytesRead = dis.read(buff, 0, buff.length))) {
fos.write(buff, 0, bytesRead);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (dis != null)
dis.close();
if (fos != null)
fos.close();
}
}
/**
* 获取文件流
* @param directory
* @param downloadFile
* @return
*/
public InputStream getFile(String directory, String downloadFile) {
InputStream is = null;
try {
sftp.cd(directory);
is = sftp.get(downloadFile);
} catch (Exception e) {
e.printStackTrace();
}
return is;
}
这里只是简单的应用,更详细的讲解可以看下面的地址
http://www.cnblogs.com/longyg/archive/2012/06/25/2556576.html