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编程的一个基本 ...
随机推荐
- mybatis 查询 xml list参数
mybatis 查询 xml list参数: <select id="getByIds" resultType="string" parameterTyp ...
- PHP加密解密数字
<?php /** * 加密解密类,PHP加密解密数字,适用于URL加密 * 该算法仅支持加密数字.比较适用于数据库中id字段的加密解密,以及根据数字显示url的加密. * @version a ...
- 如何利用php+android+新浪sae服务器做一个app下载应用
功能简介:提供一个app下载的平台,类似于appstore,上面有很多app可供下载 实现基本思路:利用android,在手机桌面建立一个图标,点击该图标不是打开app应用,而是跳转到一个web页面, ...
- HTML基本结构与标签总结整理篇
HTML基本结构与标签总结整理篇 前言:这是笔者的学习总结与整理,如果有错误或疑问的地方,欢迎指正与讨论!另:此文会不定时更新~ 1.了解HTML 学习前端技术,必然涉及三个方面:html(结构).c ...
- 【summary】JQuery 相关css、ajax、数据操作函数或方法
总结一下JQuery常用的函数方法,更加系统的整理一下. JQuery遍历的一些函数: 函数 描述 .add() 将元素添加到匹配元素的集合中. .andSelf() 把堆栈中之前的元素集添加到当前集 ...
- Scratch2的离线下载与安装
scratch是一种程序设计语言,可以用来设计 故事.动画.游戏.音乐和美术作品. Scratch主页:https://scratch.mit.edu/ Scratch的下载与安装: 首先下载并安装A ...
- 基于angular4.0分页组件
分页组件一般只某个页面的一小部分,所以我们它是子组件 当然如果你承认这话的,可以往下看,因为我把他当作子组建来写了 分页组件的模版 import { Component } from '@angula ...
- 新闻信息的javaBean
//新闻信息的javaBeanpublic class News { //新闻属性 private int id; //id private int categoryId ;//新闻类别id priv ...
- usaco 2008 月赛 lites 开关灯 题解
题目: Farmer John尝试通过和奶牛们玩益智玩具来保持他的奶牛们思维敏捷. 其中一个大型玩具是 牛栏中的灯. N (2 <= N <= 100,000) 头奶牛中的每一 ...
- vijos1051题解
题目: 圣诞老人回到了北极圣诞区,已经快到12点了.也就是说极光表演要开始了.这里的极光不是极地特有的自然极光景象.而是圣诞老人主持的人造极光. 轰隆隆--烟花响起(来自中国的浏阳花炮之乡).接下来就 ...