Ganymed SSH-2 for Java系列6之删除远程服务器上的非空目录
2014-03-01 19:14
666 查看
上一篇已经讲到如何删除一个服务器上面的目录,但是只能删除非空目录,如果是一个非空目录,其下面存在着目录和文件,并且目录中还有目录和文件,
这个该如何删除啦,下面给出方法:
首先给出服务器上的目录结构:
文件列表:
/usr/local/test/tt.txt
/usr/local/test/kk/ttp/t.txt
/usr/local/test/kk/ttt.txt
/usr/local/test/ttt/t.txt
目录列表:
/usr/local/test/kk/ttp
/usr/local/test/kk
/usr/local/test/ttt
/usr/local/test
继续在以前的方法中增加静态方法:
这个方法中的目录校验不太严格:应该用正则表达式匹配比较合适:
测试代码:
执行结果:
这个地方只是简单的打印,可以去服务器上查看,目录的确已经被删除了。
下一篇将对此代码部分做一些讲解,后面将出如何用更简单的办法删除目录非空目录。
这个该如何删除啦,下面给出方法:
首先给出服务器上的目录结构:
文件列表:
/usr/local/test/tt.txt
/usr/local/test/kk/ttp/t.txt
/usr/local/test/kk/ttt.txt
/usr/local/test/ttt/t.txt
目录列表:
/usr/local/test/kk/ttp
/usr/local/test/kk
/usr/local/test/ttt
/usr/local/test
继续在以前的方法中增加静态方法:
/** * * @param host * @param username * @param password * @param remoteDerectory * @param port * @throws IOException */ public static void rmDirectoryNotEmpty(String host, String username, String password, String remoteDerectory, int port) throws IOException { if (logger.isInfoEnabled()) { logger.info("rm [" + remoteDerectory + "] is " + host + remoteDerectory); } // 路径格式保持统一 if (null != remoteDerectory && remoteDerectory.endsWith("/")) { remoteDerectory = remoteDerectory.substring(0, remoteDerectory.length() - 1); } Connection conn = null; try { conn = getOpenedConnection(host, username, password, port); SFTPv3Client sftpClient = new SFTPv3Client(conn); List<String> filelist = new ArrayList<String>(); List<String> direlist = new ArrayList<String>(); direlist.add(remoteDerectory); Vector v = sftpClient.ls(remoteDerectory); getUrlPath(sftpClient, filelist, direlist, remoteDerectory); System.out.println("file list is::"); for (int i = filelist.size() - 1; i > -1; i--) { System.out.println(filelist.get(i)); sftpClient.rm(filelist.get(i)); } System.out.println("directory list is::"); for (int i = direlist.size() - 1; i > -1; i--) { System.out.println(direlist.get(i)); sftpClient.rmdir(direlist.get(i)); }
sftpClient.close();
} finally {
if (null != conn) { conn.close(); } } }
private static void getUrlPath(SFTPv3Client sftpClient, List<String> filelist, List<String> direlist, String remoteDerectory) throws IOException { Vector v = sftpClient.ls(remoteDerectory); for (Iterator iterator = v.iterator(); iterator.hasNext();) { SFTPv3DirectoryEntry object = (SFTPv3DirectoryEntry) iterator .next(); System.out.println(object.filename); if (object.attributes.isDirectory() && object.filename.indexOf(".") == -1) { String rderectory = remoteDerectory + "/" + object.filename; direlist.add(rderectory); getUrlPath(sftpClient, filelist, direlist, rderectory); } else if (!object.filename.startsWith(".") && !object.filename.endsWith(".")) { String path = remoteDerectory + "/" + object.filename; filelist.add(path); } } }
这个方法中的目录校验不太严格:应该用正则表达式匹配比较合适:
!object.filename.startsWith(".") && !object.filename.endsWith("."))这个地方的
object.filename会是. .. ... ....等,主要是避免这些文件名称的,此处做简单处理了。
测试代码:
String remoteDir = "/usr/local/test/"; try { CommandRunner.rmNotEmptyDirectory("172.16.18.141", "root", "123456", remoteDir, 22); } catch (IOException e) { e.printStackTrace(); }
执行结果:
这个地方只是简单的打印,可以去服务器上查看,目录的确已经被删除了。
下一篇将对此代码部分做一些讲解,后面将出如何用更简单的办法删除目录非空目录。
相关文章推荐
- Ganymed SSH-2 for Java系列7之删除远程服务器上的非空目录(方法说明)
- Ganymed SSH-2 for Java系列7之删除远程服务器上的非空目录(运用执行shell脚本的方式)
- Ganymed SSH-2 for Java系列6之删除远程服务器上的非空目录
- Ganymed SSH-2 for Java系列7之删除远程服务器上的非空目录(运用执行shell脚本的方式)
- Ganymed SSH-2 for Java系列7之删除远程服务器上的非空目录(方法说明)
- Ganymed SSH-2 for Java系列5之删除远程服务器上的目录(补充说明)
- Ganymed SSH-2 for Java系列5之删除远程服务器上的目录
- Ganymed SSH-2 for Java系列5之删除远程服务器上的目录(补充说明)
- Ganymed SSH-2 for Java系列5之删除远程服务器上的目录
- Ganymed SSH-2 for Java系列4之删除远程服务器上的文件
- Ganymed SSH-2 for Java系列4之删除远程服务器上的文件
- Ganymed SSH-2 for Java系列2之连接远程服务器
- Ganymed SSH-2 for Java系列2之连接远程服务器
- Ganymed SSH-2 for Java系列3之执行远程shell 命令
- Ganymed SSH-2 for Java系列3之执行远程shell 命令
- java使用Jsch实现远程操作linux服务器进行文件上传、下载,删除和显示目录信息
- Ganymed SSH-2 for Java系列1之 ganymed-ssh2介绍
- Ganymed SSH-2 for Java系列8之SFTPv3Client说明
- 自己用代码实现非空目录的删除(java及C语言)
- Ganymed SSH-2 for Java系列9之scpPut