• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > Java语言实现简单FTP软件 FTP远程文件管理模块实现(10)

Java语言实现简单FTP软件 FTP远程文件管理模块实现(10)

作者:欧阳鹏 字体:[增加 减小] 来源:互联网 时间:2017-05-28

欧阳鹏 通过本文主要向大家介绍了java语言实现,java语言实现机制,java语言实现计算器,软件工程java语言实现,java语言是简单的等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文为大家分享了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); 
 } 
</div>

2、刷新远程FTP服务器端的文件列表

点击“刷新”按钮,会触发com.oyp.ftp.panel.ftp.RefreshAction类的actionPerformed(ActionEvent e)方法,其主要代码如下

/** 刷新按钮的动作处理器动作的事件处理方法 **/ 
 @Override 
 public void actionPerformed(ActionEvent e) { 
 ftpPanel.refreshCurrentFolder(); // 调用刷新FTP资源列表的方法 
 } 

</div>

上面的响应事件会调用com.oyp.ftp.panel.ftp.FtpPanel类的refreshCurrentFolder()方法,其主要代码如下

/** 刷新FTP资源管理面板的当前文件夹**/ 
 public void refreshCurrentFolder() { 
 try { 
  // 获取服务器文件列表 
  TelnetInputStream list = ftpClient.list(); 
  listFtpFiles(list); // 调用解析方法 
 } catch (IOException e) { 
  e.printStackTrace(); 
 } 
 } 
</div>

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(); 
} 
</div>

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] +fileMessag



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Java语言实现简单FTP软件 辅助功能模块FTP站点管理实现(12)
  • Java语言实现简单FTP软件 FTP上传下载管理模块实现(11)
  • Java语言实现简单FTP软件 FTP远程文件管理模块实现(10)
  • Java语言实现简单FTP软件 FTP本地文件管理模块实现(9)
  • Java语言实现简单FTP软件 FTP连接管理模块实现(8)
  • Java语言实现简单FTP软件 FTP上传下载队列窗口实现(7)
  • Java语言实现简单FTP软件 FTP软件远程窗口实现(6)
  • Java语言实现简单FTP软件 FTP软件本地窗口实现(5)
  • Java语言实现简单FTP软件 FTP软件主界面(4)
  • Java语言实现简单FTP软件 FTP软件效果图预览之上传功能(3)

相关文章

  • 2017-05-28java实现ftp文件上传下载功能
  • 2017-05-28使用Lucene实现一个简单的布尔搜索功能
  • 2017-05-28Java实现纪元秒和本地日期时间互换的方法【经典实例】
  • 2017-05-28详解Redis 缓存 + Spring 的集成示例
  • 2017-05-28AspectJ的基本用法
  • 2017-05-28Lucene实现多种高级搜索形式
  • 2017-05-28Java初学者常问的问题(推荐)
  • 2017-05-28Netty学习教程之Netty与Marshalling结合发送对象
  • 2017-05-28Spring+quartz实现定时发送邮件功能实例
  • 2017-05-28Spring Boot(四)之使用JWT和Spring Security保护REST API

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 详解JAVA的封装
    • 浅谈Java中几个常用集合添加元素的效率
    • Spring核心IoC和AOP的理解
    • java随机验证码生成实现实例代码
    • spring boot配合前端实现跨域请求访问
    • springboot实现FastJson解析json数据的方法
    • JAVA线程sleep()和wait()详解及实例
    • mybatis分页效果实现代码
    • Java 字符串连接的性能问题分析
    • Java Timezone类常见问题_动力节点Java学院整理

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有