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编程的一个基本 ...
随机推荐
- is not allowed to connect to this MySQL server
解决办法: 这是告诉你没有权限连接指定IP的主机mysql --user=root -p; use mysql; GRANT SELECT,INSERT,UPDATE,DELETE ON host.* ...
- php中有关合并某一字段键值相同的数组合并
<?php function combine($array,$start,$key,$newkey){ static $new; //静态变量 foreach($array as $k=> ...
- Reflect(反射)
反射.反射,程序员的快乐.反射是无处不在的. 那么什么是反射:通过反射,可以在运行时获得程序或程序集中每一个类型(包括类.结构.委托.接口和枚举等)的成员和成员的信息.有了反射,即可对每一个类型了如指 ...
- 转载: C++ 获取文件夹下的所有文件名
最近需要得到某个文件夹下所有文件名,于是就上网上查了查,得到如下的解决方案最多: 而且查到的最早的版本是这个:http://blog.csdn.net/cxf7394373/article/detai ...
- URL和HTTP协议(无图片)
URL...... 示例: http://localhost/phpwind/searcher.php?keyword=phpwind&type=thread 协议部分:一般是指URL中第一个 ...
- 使用python操作mysql数据库
这是我之前使用mysql时用到的一些库及开发的工具,这里记录下,也方便我查阅. python版本: 2.7.13 mysql版本: 5.5.36 几个python库 1.mysql-connector ...
- Java基础(7)-异常处理
异常处理 异常继承层次 Throwable |-Error 致命的错误无法处理 |-Exception |-IOException 系统资源读取失败等错误 |-RuntimeException(未检异 ...
- BufferedReaderTest
package JBJADV003;import java.io.*;public class BufferedReaderTest { /** * @param args */ public sta ...
- [UWP]浅谈按钮设计
一时兴起想谈谈UWP按钮的设计. 按钮是UI中最重要的元素之一,可能也是用得最多的交互元素.好的按钮设计可以有效提高用户体验,构造让人眼前一亮的UI.而且按钮通常不会影响布局,小小的按钮无论怎么改也不 ...
- MyBatis基础
一.大配置 <?xml version="1.0" encoding="UTF-8" ?> <!--文档类型,头文件--> <!D ...