Java语言实现简单FTP软件 FTP软件远程窗口实现(6)
程序员文章站
2024-03-02 11:25:34
本文为大家介绍了ftp软件远程窗口的实现方法,供大家参考,具体内容如下
1、首先看一下远程窗口的布局效果
2、看一下本地窗口实现的代码框架
3、远...
本文为大家介绍了ftp软件远程窗口的实现方法,供大家参考,具体内容如下
1、首先看一下远程窗口的布局效果
2、看一下本地窗口实现的代码框架
3、远程窗口主要实现代码ftppanel.java
package com.oyp.ftp.panel.ftp; import java.awt.color; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.io.ioexception; import java.util.linkedlist; import java.util.queue; import java.util.logging.level; import java.util.logging.logger; import javax.swing.actionmap; import javax.swing.jscrollpane; import javax.swing.jtable; import javax.swing.swingutilities; import javax.swing.timer; import javax.swing.table.defaulttablemodel; import javax.swing.table.tablemodel; import javax.swing.table.tablerowsorter; import javax.swing.table.tablestringconverter; import sun.net.telnetinputstream; import com.oyp.ftp.ftpclientframe; import com.oyp.ftp.panel.ftptablecellranderer; import com.oyp.ftp.utils.ftpclient; import com.oyp.ftp.utils.ftpfile; public class ftppanel extends javax.swing.jpanel { ftpclient ftpclient; private javax.swing.jbutton createfolderbutton; private javax.swing.jbutton delbutton; private javax.swing.jbutton downbutton; javax.swing.jtable ftpdisktable; private javax.swing.jlabel ftpselfilepathlabel; private javax.swing.jscrollpane scrollpane; private javax.swing.jtoolbar toolbar; private javax.swing.jbutton refreshbutton; private javax.swing.jbutton renamebutton; ftpclientframe frame = null; queue<object[]> queue = new linkedlist<object[]>(); private downthread thread; public ftppanel() { initcomponents(); } public ftppanel(ftpclientframe client_frame) { frame = client_frame; initcomponents(); } private void initcomponents() { actionmap actionmap = getactionmap(); actionmap.put("createfolderaction", new createfolderaction(this, "创建文件夹", null)); actionmap.put("delaction", new delfileaction(this, "删除", null)); actionmap.put("refreshaction", new refreshaction(this, "刷新", null)); actionmap.put("renameaction", new renameaction(this, "重命名", null)); actionmap.put("downaction", new downaction(this, "下载", null)); java.awt.gridbagconstraints gridbagconstraints; toolbar = new javax.swing.jtoolbar(); delbutton = new javax.swing.jbutton(); renamebutton = new javax.swing.jbutton(); createfolderbutton = new javax.swing.jbutton(); downbutton = new javax.swing.jbutton(); refreshbutton = new javax.swing.jbutton(); scrollpane = new jscrollpane(); ftpdisktable = new jtable(); ftpdisktable.setdragenabled(true); ftpselfilepathlabel = new javax.swing.jlabel(); setborder(javax.swing.borderfactory.createtitledborder(null, "远程", javax.swing.border.titledborder.center, javax.swing.border.titledborder.above_top)); setlayout(new java.awt.gridbaglayout()); toolbar.setrollover(true); toolbar.setfloatable(false); delbutton.settext("删除"); delbutton.setfocusable(false); delbutton.sethorizontaltextposition(javax.swing.swingconstants.center); delbutton.setverticaltextposition(javax.swing.swingconstants.bottom); delbutton.setaction(actionmap.get("delaction")); toolbar.add(delbutton); renamebutton.settext("重命名"); renamebutton.setfocusable(false); renamebutton.setaction(actionmap.get("renameaction")); toolbar.add(renamebutton); createfolderbutton.settext("新文件夹"); createfolderbutton.setfocusable(false); createfolderbutton.setaction(actionmap.get("createfolderaction")); toolbar.add(createfolderbutton); downbutton.settext("下载"); downbutton.setfocusable(false); downbutton.setaction(actionmap.get("downaction")); toolbar.add(downbutton); refreshbutton.settext("刷新"); refreshbutton.setfocusable(false); refreshbutton.setaction(actionmap.get("refreshaction")); toolbar.add(refreshbutton); gridbagconstraints = new java.awt.gridbagconstraints(); gridbagconstraints.gridx = 0; gridbagconstraints.gridy = 0; gridbagconstraints.fill = java.awt.gridbagconstraints.horizontal; gridbagconstraints.weightx = 1.0; add(toolbar, gridbagconstraints); ftpdisktable.setmodel(new ftptablemodel()); ftpdisktable.setshowhorizontallines(false); ftpdisktable.setshowverticallines(false); ftpdisktable.gettableheader().setreorderingallowed(false); ftpdisktable.setdoublebuffered(true); ftpdisktable.addmouselistener(new java.awt.event.mouseadapter() { public void mouseclicked(java.awt.event.mouseevent evt) { ftpdisktablemouseclicked(evt); } }); scrollpane.setviewportview(ftpdisktable); scrollpane.getviewport().setbackground(color.white); //设置渲染本地资源和ftp资源表格组件的渲染器 ftpdisktable.getcolumnmodel().getcolumn(0).setcellrenderer( ftptablecellranderer.getcellranderer()); //rowsorter 的一个实现,它使用 tablemodel 提供排序和过滤操作。 tablerowsorter<tablemodel> sorter = new tablerowsorter<tablemodel>( ftpdisktable.getmodel()); tablestringconverter converter = new tableconverter(); //设置负责将值从模型转换为字符串的对象。 sorter.setstringconverter(converter); //设置 rowsorter。rowsorter 用于提供对 jtable 的排序和过滤。 ftpdisktable.setrowsorter(sorter); /** * 颠倒指定列的排序顺序。调用此方法时,由子类提供具体行为。 * 通常,如果指定列已经是主要排序列,则此方法将升序变为降序(或将降序变为升序); * 否则,使指定列成为主要排序列,并使用升序排序顺序。如果指定列不可排序,则此方法没有任何效果。 */ sorter.togglesortorder(0); gridbagconstraints = new java.awt.gridbagconstraints(); gridbagconstraints.gridx = 0; gridbagconstraints.gridy = 2; gridbagconstraints.fill = java.awt.gridbagconstraints.both; gridbagconstraints.weightx = 1.0; gridbagconstraints.weighty = 1.0; add(scrollpane, gridbagconstraints); ftpselfilepathlabel.setborder(javax.swing.borderfactory .createetchedborder()); gridbagconstraints = new java.awt.gridbagconstraints(); gridbagconstraints.gridx = 0; gridbagconstraints.gridy = 3; gridbagconstraints.fill = java.awt.gridbagconstraints.horizontal; add(ftpselfilepathlabel, gridbagconstraints); } /** * 表格单击或双击事件的处理方法。 */ private void ftpdisktablemouseclicked(java.awt.event.mouseevent evt) { int selectedrow = ftpdisktable.getselectedrow(); object value = ftpdisktable.getvalueat(selectedrow, 0); if (value instanceof ftpfile) { ftpfile selfile = (ftpfile) value; ftpselfilepathlabel.settext(selfile.getabsolutepath()); if (evt.getclickcount() >= 2) { //双击鼠标 if (selfile.isdirectory()) { try { ftpclient.cd(selfile.getabsolutepath()); listftpfiles(ftpclient.list()); } catch (ioexception ex) { ex.printstacktrace(); } } } } } /** * 读取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); // list.close(); int i=0,j=0; while(i<bufsize){ char bc=(char)names[i]; system.out.print(i+" "+bc+" "); //文件名在数据中开始做坐标为j,i-j为文件名的长度,文件名在数据中的结束下标为i-1 if (names[i]==13) { // system.out.println("j:"+j+" i:"+i+ " i-j:"+(i-j)); string temname=new string(names,j,i-j); system.out.println("temname="+temname); j=i+2; } i=i+1; } */ /* 其中格式应满足如下格式的字符串 结果为: 0 -: 1 r: 2 w: 3 x: 4 -: 5 -: 6 -: 7 -: 8 -: 9 -: 10 : 11 1: 12 : 13 u: 14 s: 15 e: 16 r: 17 : 18 g: 19 r: 20 o: 21 u: 22 p: 23 : 24 : 25 : 26 : 27 : 28 : 29 : 30 : 31 : 32 6: 33 7: 34 8: 35 4: 36 3: 37 0: 38 : 39 a: 40 p: 41 r: 42 : 43 1: 44 6: 45 : 46 2: 47 1: 48 :: 49 4: 50 6: 51 : 52 f: 53 t: 54 p: 55 ?: 56 ?: 57 ?: 58 ?: 59 ?: 60 ?: 61 ?: 62 ?: 63 ?: 64 ?: 65 ?: 66 ?: 67 ?: 68 ?: 69 ?: 70 ?: 71 ?: 72 ?: 73 .: 74 p: 75 d: 76 f: 77 -rwx------ 1 user group 678430 apr 16 21:46 ftp客户端的设计与实现.pdf -rwx------ 1 user group 87504927 apr 18 22:50 vc.深入详解(孙鑫)[www.xuexi111.com].pdf -rwx------ 1 user group 57344 apr 18 05:32 腾讯电商2013实习生招聘tst推荐模板.xls *<br>d 表示目录 * <br>- 表示文件 * <br>rw-rw-rw- 表示权限设置 datestr:39-51 sizeordir:23-38 filename:52-^ */ /*********************************************************/ 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]; // system.out.println("sizeordir="+sizeordir); // system.out.println("filename="+filename); // system.out.println("datestr="+datestr); 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(); /********************************************************************** //下面的方法太死了,不够灵活 bufferedreader br = new bufferedreader( new inputstreamreader(list)); // 创建字符输入流 string data = null; // 读取输入流中的文件目录 while ((data = br.readline()) != null) { // 创建ftp文件对象 ftpfile ftpfile = new ftpfile(); // 获取ftp服务器目录信息 string datestr = data.substring(39, 51).trim(); string sizeordir = data.substring(23, 38).trim(); string filename = data.substring(52, data.length()) .trim(); // 将ftp目录信息初始化到ftp文件对象中 ftpfile.setlastdate(datestr); ftpfile.setsize(sizeordir); ftpfile.setname(filename); ftpfile.setpath(pwd); // 将文件信息添加到表格中 model.addrow(new object[] { ftpfile, ftpfile.getsize(), datestr }); } br.close(); // 关闭输入流 **********************************************************************/ } catch (ioexception ex) { logger.getlogger(ftpclientframe.class.getname()).log( level.severe, null, ex); } } }; if (swingutilities.iseventdispatchthread()) // 启动线程对象 runnable.run(); else swingutilities.invokelater(runnable); } /** * 设置ftp连接,并启动下载队列线程的方法 */ public void setftpclient(ftpclient ftpclient) { this.ftpclient = ftpclient; // 以30秒为间隔与服务器保持通讯 final timer timer = new timer(3000, new actionlistener() { @override public void actionperformed(actionevent e) { try { final ftpclient ftpclient = ftppanel.this.ftpclient; if (ftpclient != null && ftpclient.serverisopen()) { ftpclient.noop(); } } catch (ioexception e1) { e1.printstacktrace(); } } }); timer.start(); startdownthread(); } /** * 刷新ftp资源管理面板的当前文件夹 */ public void refreshcurrentfolder() { try { // 获取服务器文件列表 telnetinputstream list = ftpclient.list(); listftpfiles(list); // 调用解析方法 } catch (ioexception e) { e.printstacktrace(); } } /** * 开始下载队列线程 */ private void startdownthread() { if (thread != null) thread.stopthread(); thread = new downthread(this); thread.start(); } /** * 停止下载队列线程 */ public void stopdownthread() { if (thread != null) { thread.stopthread(); ftpclient = null; } } public string getpwd() { string pwd = null; try { pwd = ftpclient.pwd(); } catch (ioexception e) { e.printstacktrace(); } return pwd; } public queue<object[]> getqueue() { return queue; } /** * 清除ftp资源表格内容的方法 */ public void cleartable() { ftptablemodel model = (ftptablemodel) ftpdisktable.getmodel(); model.setrowcount(0); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
下一篇: java在网页上面抓取邮件地址的方法
推荐阅读
-
Java语言实现简单FTP软件 FTP软件本地窗口实现(5)
-
Java语言实现简单FTP软件 FTP软件远程窗口实现(6)
-
Java语言实现简单FTP软件 FTP软件主界面(4)
-
Java语言实现简单FTP软件 FTP本地文件管理模块实现(9)
-
Java语言实现简单FTP软件 辅助功能模块FTP站点管理实现(12)
-
Java语言实现简单FTP软件 FTP远程文件管理模块实现(10)
-
Java语言实现简单FTP软件 FTP上传下载管理模块实现(11)
-
用java实现简单FTP远程文件管理的功能(ftp软件开发四)
-
用java实现FTP本地文件管理模块功能实例(ftp软件开发三)
-
用java实现FTP上传下载队列窗口功能(ftp软件开发二)