Java常用文件操作-2
上篇文章记录了常用的文件操作,这里记录下通过SSH服务器操作Linux服务器的指定路径下的文件。
这里用到了第三方jar包 jsch-0.1.53.jar, jsch-api
1、删除服务器上指定路径下的所有文件(包括本目录)-经测试,在Linux下运行,没有问题
/**
* 删除
*@param dst
*@param sftpUtil
*@return
*@author qin_hqing
*@date 2015年7月6日 下午4:45:31
*@comment
*/
protected static boolean removeFileFromSSH(String dst, ChannelSftp chanSftp) {
boolean bl = false; try {
chanSftp.cd(dst);
@SuppressWarnings("unchecked")
Vector<LsEntry> v = chanSftp.ls(dst);
if (v.size() == 2) { //空文件夹 直接删除
chanSftp.rmdir(dst);
}else {
int delSize = 0;
for (Iterator<LsEntry> iterator = v.iterator(); iterator.hasNext();) { LsEntry lsEntry = (LsEntry) iterator.next();
String ffName = lsEntry.getFilename();
if (ffName.indexOf(".")>0) { // file
chanSftp.rm(ffName); //删除文件
}else if(ffName.indexOf(".") == -1) {
removeFileFromSSH(dst+ffName+File.separator, chanSftp); //如果路径有问题可以试着把 File.separator 改成 "/"试试
chanSftp.cd(dst);
} if (delSize == v.size()-1) { //当前文件夹下还存在文件夹
removeFileFromSSH(dst, chanSftp);
}
delSize ++;
}
} bl = true;
} catch (SftpException e) {
e.printStackTrace();
} return bl;
}
2、上传文件到服务器
A)这里我们用到了一个工具类,该工具类主要功能是通过SSH连接到Linux服务器,释放资源,在服务器上创建路径,代码如下:
package fileUtil; import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Vector; import org.apache.log4j.Logger; import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException; /**
* @包名 util.sftp
* @文件名 SFTPChannelUtil.java
* @作者 Edi_Kai
* @创建日期 2015年7月3日
* @版本 V 1.0
* @描述
*/
public class SFTPChannelUtil { private static final Logger LOG = Logger.getLogger(SFTPChannelUtil.class); Session session = null;
Channel channel = null;
List<File> list = new ArrayList<File>(); private static SFTPChannelUtil util; public static SFTPChannelUtil getSftpChannelUtil() {
if (null == util) {
util = new SFTPChannelUtil();
}
return util;
} /**
* 获取ChannelSftp连接
*@param sftpDetails
*@param timeout
*@return
*@throws JSchException
*@author Edi_Kai
*@date 2015年7月3日 下午5:26:41
*@comment
*/
public ChannelSftp getChannel(Map<String, String> sftpDetails, int timeout)
throws JSchException { String ftpHost = sftpDetails.get(SFTPConstants.SFTP_REQ_HOST);
String ftpPort = sftpDetails.get(SFTPConstants.SFTP_REQ_PORT);
String ftpUserName = sftpDetails.get(SFTPConstants.SFTP_REQ_USERNAME);
String ftpPassword = sftpDetails.get(SFTPConstants.SFTP_REQ_PASSWORD); JSch jsch = new JSch(); // 创建JSch对象
session = jsch.getSession(ftpUserName, ftpHost, Integer.parseInt(ftpPort)); // 根据用户名,主机ip,端口获取一个Session对象
LOG.debug("Session created.");
if (ftpPassword != null) {
session.setPassword(ftpPassword); // 设置密码
}
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config); // 为Session对象设置properties
session.setTimeout(timeout); // 设置timeout时间
session.connect(); // 通过Session建立链接
LOG.debug("Session connected."); LOG.debug("Opening Channel.");
channel = session.openChannel("sftp"); // 打开SFTP通道
channel.connect(); // 建立SFTP通道的连接
LOG.debug("Connected successfully to ftpHost = " + ftpHost
+ ",as ftpUserName = " + ftpUserName + ", returning: "
+ channel);
return (ChannelSftp) channel;
} /**
* 关闭连接
*@throws Exception
*@author Edi_Kai
*@date 2015年7月3日 下午5:27:02
*@comment
*/
public void closeChannel() throws Exception {
if (channel != null) {
channel.disconnect();
}
if (session != null) {
session.disconnect();
}
} /**
* 查看服务器上是否存在该目录,如果不存在则创建
*@param dir
*@param channelSftp
*@author Edi_Kai
*@date 2015年7月3日 下午5:07:25
*@comment
*/
public void createDir(String dir, ChannelSftp channelSftp) {
String parDir = dir.substring(0, dir.lastIndexOf("/"));
try {
Vector<?> content = channelSftp.ls(dir); if (content == null) {
createDir(parDir, channelSftp);
if (dir.indexOf(".")<0) {
channelSftp.mkdir(dir);
}
}
} catch (SftpException e) {
try {
createDir(parDir, channelSftp);//如果报异常,则说明dir路径不存在,则创建该路径
if (dir.indexOf(".")<0) {
channelSftp.mkdir(dir);
}
} catch (SftpException e1) {
e1.printStackTrace();
}
}
}
}
该类中用到了一个存放常量参数的配置类,SFTPConstants.java,代码如下
package fileUtil; import java.util.HashMap;
import java.util.Map; /**
* @包名 util.sftp
* @文件名 SFTPConstants.java
* @作者 Edi_Kai
* @创建日期 2015年7月3日
* @版本 V 1.0
* @描述
*/
public class SFTPConstants {
public static final String SFTP_REQ_HOST = "host";
public static final String SFTP_REQ_PORT = "port";
public static final String SFTP_REQ_USERNAME = "username";
public static final String SFTP_REQ_PASSWORD = "password"; /**
* 获取Linux服务器 登录信息
*@return
*@author Edi_Kai
*@date 2015年7月3日 下午5:23:37
*@comment
*/
public static Map<String, String> getConfig() {
Map<String, String> cfg = new HashMap<String, String>();
cfg.put(SFTP_REQ_HOST, FileUtil.getPropValue("sshServerHost"));//192.168.1.110
cfg.put(SFTP_REQ_PORT, FileUtil.getPropValue("sshServerPort"));//
cfg.put(SFTP_REQ_USERNAME, FileUtil.getPropValue("sshServerUN"));
cfg.put(SFTP_REQ_PASSWORD, FileUtil.getPropValue("sshServerPwd")); return cfg;
}
}
B)、上传文件到服务器
/**
* 将本服务器上的文件上传到SSH服务器的指定路径下
*@param src 本地服务器文件路径
*@param dst SSH服务器路径
*@return
*@author Edi_Kai
*@date 2015年7月6日 上午11:58:30
*@comment
*/
public static boolean upFile2SSHServer(String src, String dst) {
boolean bl = false;
SFTPChannelUtil util = SFTPChannelUtil.getSftpChannelUtil();
try {
ChannelSftp chanSftp = util.getChannel(SFTPConstants.getConfig(), 10000); List<File> list = FileUtil.getAllFile(src);
for (int i = 0; i < list.size(); i++) {
String path = list.get(i).getPath(); path = path.replaceAll("\\\\", "/");// E:/ad4/css/ad.css
if (path.indexOf(":")>-1) {
path = path.split(":")[1].substring(1);// ad4/css/ad.css
} util.createDir(dst, chanSftp); chanSftp.put(list.get(i).getPath(), serverPath);
} bl = true;
} catch (JSchException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
util.closeChannel();
} catch (Exception e) {
e.printStackTrace();
}
}
return bl;
}
如有遗漏,继续追加....
/**************************************************************/
每天多学一点....
/**************************************************************/
Java常用文件操作-2的更多相关文章
- Java常用文件操作-1
在我们的实际工作中经常会用到的文件操作,再此,将工作中碰到的做一个记录,以便日后查看. 1.复制文件夹到新文件夹下 /** * 复制文件夹下所有文件到指定路径 *@param oldPath *@pa ...
- java常见文件操作
收集整理的java常见文件操作,方便平时使用: //1.创建文件夹 //import java.io.*; File myFolderPath = new File(str1); try { if ( ...
- python 历险记(三)— python 的常用文件操作
目录 前言 文件 什么是文件? 如何在 python 中打开文件? python 文件对象有哪些属性? 如何读文件? read() readline() 如何写文件? 如何操作文件和目录? 强大的 o ...
- Python之常用文件操作
Python之常用文件操作
- Unix/Linux常用文件操作
Unix/Linux常用文件操作 秘籍:man命令是Unix/Linux中最常用的命令,因为命令行命令过多,我相信每个人都会经常忘记某些命令的用法,man命令就可以显示一个命令的所有选项,参数和说明, ...
- 真香!Python十大常用文件操作,轻松办公
日常对于批量处理文件的需求非常多,用Python写脚本可以非常方便地实现,但在这过程中难免会和文件打交道,第一次做会有很多文件的操作无从下手,只能找度娘. 本篇文章整理了10个Python中最常用到的 ...
- java中文件操作《一》
在日常的开发中我们经常会碰到对文件的操作,在java中对文件的操作都在java.io包下,这个包下的类有File.inputStream.outputStream.FileInputStream.Fi ...
- Java 基本文件操作
Java 文件操作 , 这也是基于Java API 操作来实现的. 文件是操作系统管理外存数据管理的基本单位, 几乎所有的操作系统都有文件管理机制. 所谓文件, 是具有符号名而且在逻辑上具有完整意义的 ...
- Java api 入门教程 之 JAVA的文件操作
I/O类使用 由于在IO操作中,需要使用的数据源有很多,作为一个IO技术的初学者,从读写文件开始学习IO技术是一个比较好的选择.因为文件是一种常见的数据源,而且读写文件也是程序员进行IO编程的一个基本 ...
随机推荐
- 推荐几款.NET客户端开源报表图
如果你正在开发客户端报表图相关的应用,除了.NET自带的控件,你还可以考虑使用以下几个控件库. [OxyPlot] OxyPlot是一个支持.NET的跨平台绘图库.你可以在很多平台上使用它,如WPF, ...
- Android 4.0以后正确的获取外部sd卡存储目录
刚解决这个棘手的问题 找了很久,随笔记下. 网上搜索 android 获取外部sd卡存储目录 普遍都是: 1) Environment.getExternalStorageDirectory() 这个 ...
- jQuery实现的快速查找
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 打造一个简单的Java字节码反编译器
简介 本文示范了一种反编译Java字节码的方法,首先通过解析class文件,然后将解析的结果转成java代码.但是本文并没有覆盖所有的class文件的特性和指令,只针对部分规范进行解析. 所有的代码代 ...
- hadoop伪分布式环境搭建
环境:Centos6.9+jdk+hadoop1.下载hadoop的tar包,这里以hadoop2.6.5版本为例,下载地址https://archive.apache.org/dist/hadoop ...
- zookeeper初试
实验环境: os-platform: windows7 x64 jdk: 1.7 参考文档: http://www.ibm.com/developerworks/cn/opensource/os-cn ...
- iOS 微信消息拦截插件系列教程-附录(服务端成果展示)
微信iOS消息拦截插件教程 标签: 越狱开发 背景介绍 本教程所有内容免费 本教程来源于一次知识分享,如果有需要了解更多的 请联系QQ:480071411 iOS逆向高级开发群:375024882 服 ...
- 快速查询List中指定的数据
时间:2017/5/15 作者:李国君 题目:快速查询List中指定的数据 背景:当List中保存了大量的数据时,用传统的方法去遍历指定的数据肯定会效率低下,有一个方法就是类似于数据库查询那样,根据索 ...
- ORM的概念, ORM到底是什么
一.ORM简介 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术.简单的说,ORM是通过使 ...
- 64位win7安装jdk和eclipse
本人正确安装成功步骤,对他人可能无用: 1.直接拷以前32位eclipse ADT 2.安装32位的jdk:jdk-8u45-windows-i586 3.ok,所有环境变量无需手工设置 eclips ...