热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Java语言实现简单FTP软件FTP软件远程窗口实现(6)

这篇文章主要为大家详细介绍了Java语言实现简单FTP软件,FTP软件远程窗口的实现方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文为大家介绍了FTP软件远程窗口的实现方法,供大家参考,具体内容如下

1、首先看一下远程窗口的布局效果 

2、看一下本地窗口实现的代码框架

3、远程窗口主要实现代码FtpPanel.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
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 queue = new LinkedList();
 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 &#63;: 56 &#63;: 57 &#63;: 58 &#63;: 59 &#63;: 60 &#63;: 61 &#63;: 62 &#63;: 63 &#63;: 64 &#63;: 65 &#63;: 66 &#63;: 67 &#63;: 68 &#63;: 69 &#63;: 70 &#63;: 71 &#63;: 72 &#63;: 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("..")){="" **文件大小*="" sizeordir="" ;="" (filemessage.startswith("d"))="" 如果是目录="" }else="" (filemessage.startswith("-"))="" 如果是文件="" **文件名*="" filename="fileMessage.split("\\s+")[8];" **文件日期*="" datestr="fileMessage.split("\\s+")[5]" +"="" "+filemessage.split("\\s+")[6]+"="" +filemessage.split("\\s+")[7];="" system.out.println("sizeordir="+sizeOrDir);
//    System.out.println(" text="" javascript"="">
            var cpro_id = "u6885494";
 
         
        <script type="text/javascript" src="//cpro.baidustatic.com/cpro/ui/cm.js"></script>
    </bufsize){></tablemodel></tablemodel>
推荐阅读
  • 探讨如何通过编程技术实现100个并发连接,解决线程创建顺序问题,并提供高效的并发测试方案。 ... [详细]
  • 本周信息安全小组主要进行了CTF竞赛相关技能的学习,包括HTML和CSS的基础知识、逆向工程的初步探索以及整数溢出漏洞的学习。此外,还掌握了Linux命令行操作及互联网工作原理的基本概念。 ... [详细]
  • 本文探讨了 RESTful API 和传统接口之间的关键差异,解释了为什么 RESTful API 在设计和实现上具有独特的优势。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
  • MQTT技术周报:硬件连接与协议解析
    本周开发笔记重点介绍了在新项目中使用MQTT协议进行硬件连接的技术细节,涵盖其特性、原理及实现步骤。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 邮件(带附件,模拟文件上传,跨服务器)发送核心代码1.测试邮件发送附件接口***测试邮件发送附件*@parammultipartFile*@return*@RequestMappi ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 本文探讨了在不使用服务器控件的情况下,如何通过多种方法获取并修改页面中的HTML元素值。除了常见的AJAX方式,还介绍了其他可行的技术方案。 ... [详细]
  • 解读MySQL查询执行计划的详细指南
    本文旨在帮助开发者和数据库管理员深入了解如何解读MySQL查询执行计划。通过详细的解析,您将掌握优化查询性能的关键技巧,了解各种访问类型和额外信息的含义。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
author-avatar
zjymeimei706
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有