Java语言实现简单FTP软件 FTP远程文件管理模块实现(10)
本文为大家分享了ftp远程文件管理模块的实现方法,供大家参考,具体内容如下
首先看一下界面:
1、远程ftp服务器端的文件列表的显示
将远程的当前目录下所有文件显示出来,并显示文件的属性包括文件名、大小、日期、通过javax.swing.jtable()来显示具体的数据。更改当前文件目录会调用com.oyp.ftp.panel.ftp.ftppanel类的listftpfiles(final telnetinputstream list)方法,其主要代码如下
/** * 读取ftp文件到表格的方法 * @param list * 读取ftp服务器资源列表的输入流 */ public synchronized void listftpfiles(final telnetinputstream list) { // 获取表格的数据模型 final defaulttablemodel model = (defaulttablemodel) ftpdisktable .getmodel(); model.setrowcount(0); // 创建一个线程类 runnable runnable = new runnable() { public synchronized void run() { ftpdisktable.clearselection(); try { string pwd = getpwd(); // 获取ftp服务器的当前文件夹 model.addrow(new object[] { new ftpfile(".", pwd, true), "", "" }); // 添加“.”符号 model.addrow(new object[] { new ftpfile("..", pwd, true), "", "" }); // 添加“..”符号 byte[]names=new byte[2048]; int bufsize=0; bufsize=list.read(names, 0, names.length); int i=0,j=0; while(i<bufsize){ //字符模式为10,二进制模式为13 // if (names[i]==10) { if (names[i]==13) { //获取字符串 -rwx------ 1 user group 57344 apr 18 05:32 腾讯电商2013实习生招聘tst推荐模板.xls //文件名在数据中开始做坐标为j,i-j为文件名的长度,文件名在数据中的结束下标为i-1 string filemessage = new string(names,j,i-j); if(filemessage.length() == 0){ system.out.println("filemessage.length() == 0"); break; } //按照空格将filemessage截为数组后获取相关信息 // 正则表达式 \s表示空格,{1,}表示1一个以上 if(!filemessage.split("\\s+")[8].equals(".") && !filemessage.split("\\s+")[8].equals("..")){ /**文件大小*/ string sizeordir=""; if (filemessage.startswith("d")) {//如果是目录 sizeordir="<dir>"; }else if (filemessage.startswith("-")) {//如果是文件 sizeordir=filemessage.split("\\s+")[4]; } /**文件名*/ string filename=filemessage.split("\\s+")[8]; /**文件日期*/ string datestr =filemessage.split("\\s+")[5] +" "+filemessage.split("\\s+")[6]+" " +filemessage.split("\\s+")[7]; ftpfile ftpfile = new ftpfile(); // 将ftp目录信息初始化到ftp文件对象中 ftpfile.setlastdate(datestr); ftpfile.setsize(sizeordir); ftpfile.setname(filename); ftpfile.setpath(pwd); // 将文件信息添加到表格中 model.addrow(new object[] { ftpfile, ftpfile.getsize(), datestr }); } // j=i+1;//上一次位置为字符模式 j=i+2;//上一次位置为二进制模式 } i=i+1; } list.close(); } catch (ioexception ex) { logger.getlogger(ftpclientframe.class.getname()).log( level.severe, null, ex); } } }; if (swingutilities.iseventdispatchthread()) // 启动线程对象 runnable.run(); else swingutilities.invokelater(runnable); }
2、刷新远程ftp服务器端的文件列表
点击“刷新”按钮,会触发com.oyp.ftp.panel.ftp.refreshaction类的actionperformed(actionevent e)方法,其主要代码如下
/** 刷新按钮的动作处理器动作的事件处理方法 **/ @override public void actionperformed(actionevent e) { ftppanel.refreshcurrentfolder(); // 调用刷新ftp资源列表的方法 }
上面的响应事件会调用com.oyp.ftp.panel.ftp.ftppanel类的refreshcurrentfolder()方法,其主要代码如下
/** 刷新ftp资源管理面板的当前文件夹**/ public void refreshcurrentfolder() { try { // 获取服务器文件列表 telnetinputstream list = ftpclient.list(); listftpfiles(list); // 调用解析方法 } catch (ioexception e) { e.printstacktrace(); } }
3、新建远程ftp服务器端的文件夹
点击“新建文件夹”按钮,会触发com.oyp.ftp.panel.ftp.createfolderaction类的actionperformed(actionevent e)方法,然后弹出一个对话框,填写要新建的文件夹名称,选择“确定”,“取消”按钮结束。其主要代码如下
/** * 创建文件夹的事件处理方法 */ @override public void actionperformed(actionevent e) { // 接收用户输入的新建文件夹的名称 string foldername = joptionpane.showinputdialog("请输入文件夹名称:"); if (foldername == null) return; int read = -1; try { // 发送创建文件夹的命令 ftppanel.ftpclient.sendserver("mkd " + foldername + "\r\n"); // 读取ftp服务器的命令返回码 read = ftppanel.ftpclient.readserverresponse(); } catch (ioexception e1) { e1.printstacktrace(); } if (read == 257) {// 如果返回码等于257(路径名建立完成) // 提示文件夹创建成功 joptionpane.showmessagedialog(ftppanel, foldername + "文件夹,创建成功。", "创建文件夹", joptionpane.information_message); }else{ // 否则 提示用户该文件夹无法创建 joptionpane.showmessagedialog(ftppanel, foldername + "文件夹无法被创建。", "创建文件夹", joptionpane.error_message); } this.ftppanel.refreshcurrentfolder(); }
4、 删除远程ftp服务器端的文件
选择好要删除的文件或文件夹,点击“删除”按钮,会触发com.oyp.ftp.panel.ftp.delfileaction类的actionperformed(actionevent e)方法,然后弹出一个对话框,选择“是”,“否”,“取消”按钮结束。其主要代码如下
public void actionperformed(actionevent e) { // 获取显示ftp资源列表的表格组件当前选择的所有行 final int[] selrows = ftppanel.ftpdisktable.getselectedrows(); if (selrows.length < 1) return; int confirmdialog = joptionpane.showconfirmdialog(ftppanel, "确定要删除吗?"); if (confirmdialog == joptionpane.yes_option) { runnable runnable = new runnable() { /** * 删除服务器文件的方法 * @param file - 文件名称 */ private void delfile(ftpfile file) { ftpclient ftpclient = ftppanel.ftpclient; // 获取ftpclient实例 try { if (file.isfile()) { // 如果删除的是文件 ftpclient.sendserver("dele " + file.getname() + "\r\n"); // 发送删除文件的命令 ftpclient.readserverresponse(); // 接收返回编码 } else if (file.isdirectory()) { // 如果删除的是文件夹 ftpclient.cd(file.getname()); // 进入到该文件夹 telnetinputstream telnetinputstream=ftpclient.list(); byte[]names=new byte[2048]; int bufsize=0; bufsize=telnetinputstream.read(names, 0, names.length); int i=0,j=0; while(i<bufsize){ //字符模式为10,二进制模式为13 // if (names[i]==10) { if (names[i]==13) { //获取字符串 -rwx------ 1 user group 57344 apr 18 05:32 腾讯电商2013实习生招聘tst推荐模板.xls //文件名在数据中开始做坐标为j,i-j为文件名的长度,文件名在数据中的结束下标为i-1 string filemessage = new string(names,j,i-j); if(filemessage.length() == 0){ system.out.println("filemessage.length() == 0"); break; } //按照空格将filemessage截为数组后获取相关信息 // 正则表达式 \s表示空格,{1,}表示1一个以上 if(!filemessage.split("\\s+")[8].equals(".") && !filemessage.split("\\s+")[8].equals("..")){ /**文件大小*/ string sizeordir=""; if (filemessage.startswith("d")) {//如果是目录 sizeordir="<dir>"; }else if (filemessage.startswith("-")) {//如果是文件 sizeordir=filemessage.split("\\s+")[4]; } /**文件名*/ string filename=filemessage.split("\\s+")[8]; /**文件日期*/ string datestr =filemessage.split("\\s+")[5] +filemessage.split("\\s+")[6] +filemessage.split("\\s+")[7]; ftpfile ftpfile = new ftpfile(); // 将ftp目录信息初始化到ftp文件对象中 ftpfile.setlastdate(datestr); ftpfile.setsize(sizeordir); ftpfile.setname(filename); ftpfile.setpath(file.getabsolutepath()); // 递归删除文件或文件夹 delfile(ftpfile); } // j=i+1;//上一次位置为字符模式 j=i+2;//上一次位置为二进制模式 } i=i+1; } ftpclient.cdup(); // 返回上层文件夹 ftpclient.sendserver("rmd " + file.getname() + "\r\n"); // 发送删除文件夹指令 ftpclient.readserverresponse(); // 接收返回码 } } catch (exception ex) { logger.getlogger(localpanel.class.getname()).log( level.severe, null, ex); } } /** * 线程的主体方法 */ public void run() { // 遍历显示ftp资源的表格的所有选择行 for (int i = 0; i < selrows.length; i++) { // 获取每行的第一个单元值,并转换为ftpfile类型 final ftpfile file = (ftpfile) ftppanel.ftpdisktable .getvalueat(selrows[i], 0); if (file != null) { delfile(file); // 调用删除文件的递归方法 try { // 向服务器发删除文件夹的方法 ftppanel.ftpclient.sendserver("rmd " + file.getname() + "\r\n"); // 读取ftp服务器的返回码 ftppanel.ftpclient.readserverresponse(); } catch (ioexception e) { e.printstacktrace(); } } } // 刷新ftp服务器资源列表 delfileaction.this.ftppanel.refreshcurrentfolder(); joptionpane.showmessagedialog(ftppanel, "删除成功。"); } }; new thread(runnable).start(); } }
5、重命名远程ftp服务器端的文件
选择好要重命名的文件或文件夹,点击“重命名”按钮,会触发com.oyp.ftp.panel.ftp.renameaction类的actionperformed(actionevent e)方法,其主要代码如下
/** * 重命名ftp文件的事件处理方法 */ @override public void actionperformed(actionevent e) { // 获取显示ftp资源的表格当前选择行号 int selrow = ftppanel.ftpdisktable.getselectedrow(); if (selrow < 0) return; // 获取当前行的第一个表格单元值,并转换成ftpfile类型的对象 ftpfile file = (ftpfile) ftppanel.ftpdisktable.getvalueat(selrow, 0); // 使用对话框接收用户输入的新文件或文件夹名称 string newname = joptionpane.showinputdialog(ftppanel, "请输入新名称。"); if (file.getname().equals(".") || file.getname().equals("..") || newname == null) return; try { // 向服务器发送重命名的指令 ftppanel.ftpclient.sendserver("rnfr " + file.getname() + "\r\n"); //对旧路径重命名 ftppanel.ftpclient.readserverresponse(); ftppanel.ftpclient.sendserver("rnto " + newname + "\r\n"); //对新路径重命名 ftppanel.ftpclient.readserverresponse(); ftppanel.refreshcurrentfolder(); // 刷新当前文件夹 } catch (ioexception e1) { e1.printstacktrace(); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
推荐阅读
-
Java语言实现简单FTP软件 FTP上传下载管理模块实现(11)
-
用java实现简单FTP远程文件管理的功能(ftp软件开发四)
-
用java实现FTP本地文件管理模块功能实例(ftp软件开发三)
-
Java语言实现简单FTP软件-FTP软件效果图预览之上传功能图解(三)
-
Java语言实现简单FTP软件-FTP软件效果图预览之下载功能图文介绍(二)
-
Java语言实现简单FTP软件-FTP软件远程窗口实现(六)
-
Java语言实现简单FTP软件-FTP软件主界面的代码详解(四)
-
Java语言实现简单FTP软件-FTP协议详解(一)
-
Java语言实现简单FTP软件-FTP软件本地窗口实现(五)
-
用java实现FTP本地文件管理模块功能实例(ftp软件开发三)