• 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上传下载管理模块实现(11)

Java语言实现简单FTP软件 FTP上传下载管理模块实现(11)

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

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

本文为大家分享了FTP上传下载管理模块的实现方法,供大家参考,具体内容如下

1、上传本地文件或文件夹到远程FTP服务器端的功能。

当用户在本地文件列表中选择想要上传的文件后,点击上传按钮,将本机上指定的文件上传到FTP服务器当前展现的目录,下图为上传子模块流程图

选择好要上传的文件或文件夹,点击“上传”按钮,会触发com.oyp.ftp.panel.local.UploadAction类的actionPerformed(ActionEvent e)方法,其主要代码如下

/** 
 * 上传文件动作的事件处理方法 
 */ 
public void actionPerformed(java.awt.event.ActionEvent evt) { 
 // 获取用户选择的多个文件或文件夹 
 int[] selRows = this.localPanel.localDiskTable.getSelectedRows(); 
 if (selRows.length < 1) { 
  JOptionPane.showMessageDialog(this.localPanel, "请选择上传的文件或文件夹"); 
  return; 
 } 
 // 获取FTP服务器的当前路径 
 String pwd = this.localPanel.frame.getFtpPanel().getPwd(); 
 // 创建FTP当前路径的文件夹对象 
 FtpFile ftpFile = new FtpFile("", pwd, true); 
 // 遍历本地资源的表格 
 for (int i = 0; i < selRows.length; i++) { 
  Object valueAt = this.localPanel.localDiskTable.getValueAt( 
    selRows[i], 0); // 获取表格选择行的第一列数据 
  if (valueAt instanceof DiskFile) { 
   final DiskFile file = (DiskFile) valueAt; 
   // 获取本地面板类中的队列,该队列是LinkedList类的实例对象 
   Queue<Object[]> queue = this.localPanel.queue; 
   queue.offer(new Object[] { file, ftpFile });// 执行offer方法向队列尾添加对象 
  } 
 } 
} 
</div>

在com.oyp.ftp.panel.local.UploadThread线程类的run()方法,会判断上传队列是否有对象,如果有则调用其copyFile(File file, FtpFile ftpFile)方法实现上传文件的功能,上传完后刷新远程FTP文件管理的面板。其run()方法主要代码如下

 * 线程的主体方法 
 */ 
public void run() { // 线程的主体方法 
 while (conRun) { 
  try { 
   Thread.sleep(1000); // 线程休眠1秒 
   Queue<Object[]> queue = localPanel.queue; // 获取本地面板的队列对象 
   queueValues = queue.peek(); // 获取队列首的对象 
   if (queueValues == null) { // 如果该对象为空 
    continue; // 进行下一次循环 
   } 
   File file = (File) queueValues[0]; // 获取队列中的本队文件对象 
   FtpFile ftpFile = (FtpFile) queueValues[1]; // 获取队列中的FTP文件对象 
   if (file != null) { 
    selPath = file.getParent(); 
    copyFile(file, ftpFile); // 调用递归方法上传文件 
    FtpPanel ftpPanel = localPanel.frame.getFtpPanel(); 
    ftpPanel.refreshCurrentFolder(); // 刷新FTP面板中的资源 
   } 
   Object[] args = queue.peek(); 
   // 判断队列顶是否为处理的上一个任务。 
   if (queueValues == null || args == null 
     || !queueValues[0].equals(args[0])) { 
    continue; 
   } 
   queue.remove(); // 移除队列首元素 
  } catch (Exception e) { 
   e.printStackTrace(); 
  } 
 } 
} 
</div>

其中调用的copyFile(File file, FtpFile ftpFile)方法代码如下

  /** 
  * 上传线程的递归方法,上传文件夹的所有子文件夹和内容 
  * @param file 
  *   - FTP文件对象 
  * @param localFolder 
  *   - 本地文件夹对象 
  */ 
 private void copyFile(File file, FtpFile ftpFile) { // 递归遍历文件夹的方法 
  // 判断队列面板是否执行暂停命令 
  while (localPanel.frame.getQueuePanel().isStop()) { 
   try { 
    Thread.sleep(1000); 
   } catch (InterruptedException e) { 
    e.printStackTrace(); 
   } 
  } 
 
  Object[] args = localPanel.queue.peek(); 
  // 判断队列顶是不是上一个处理的任务。 
  if (queueValues == null || args == null 
    || !queueValues[0].equals(args[0])) 
   return; 
  try { 
//   System.out.println("selPath:"+selPath); 
   path = file.getParentFile().getPath().replace(selPath, ""); 
//   System.out.println("path:"+path); 
   ftpFile.setName(path.replace("\\", "/")); 
   path = ftpFile.getAbsolutePath(); 
//   System.out.println("ftpFile.getAbsolutePath():"+path); 
   if (file.isFile()) { 
    UploadPanel uploadPanel = localPanel.frame.getUploadPanel();//上传面板 
    String remoteFile = path + "/" + file.getName(); // 远程FTP的文件名绝对路径 
//    System.out.println("remoteFile:" + remoteFile); 
    double fileLength = file.length() / Math.pow(1024, 2); 
    ProgressArg progressArg = new ProgressArg( 
      (int) (file.length() / 1024), 0, 0);//进度参数 
    String size = String.format("%.4f MB", fileLength); 
    Object[] row = new Object[] { file.getAbsoluteFile(), size, 
      remoteFile, ftpClient.getServer(), progressArg }; 
    uploadPanel.addRow(row); //添加列 
    OutputStream put = ftpClient.put(remoteFile); // 获取服务器文件的输出流 
    FileInputStream fis = null; // 本地文件的输入流 
    try { 
     fis = new FileInputStream(file); // 初始化文件的输入流 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return; 
    } 
    int readNum = 0; 
    byte[] data = new byte[1024]; // 缓存大小 
    while ((readNum = fis.read(data)) > 0) { // 读取本地文件到缓存 
     Thread.sleep(0, 30); // 线程休眠 
     put.write(data, 0, readNum); // 输出到服务器 
     progressArg.setValue(progressArg.getValue() + 1);// 累加进度条 
    } 
    progressArg.setValue(progressArg.getMax()); // 结束进度条 
    fis.close(); // 关闭文件输入流 
    put.close(); // 关闭服务器输出流 
   } else if (file.isDirectory()) { 
    path = file.getPath().replace(selPath, ""); 
    ftpFile.setName(path.replace("\\", "/")); 
//    System.out.println("Dirpath:"+path); 
    /**将目录切换到当前FTP服务器的当前目录*/ 
    ftpClient.cd(this.localPanel.frame.getFtpPanel().getPwd());  // /media目录 
    /** 
     * 如果有创建文件夹的权限,则在当前FTP服务器的当前目录下创建文件夹 
     * 必须要有创建文件夹的权限,否则会报错 
     *  path:audio 
      ftpFile.getAbsolutePath():/media/audio 
      remoteFile:/media/audio/梁静茹-会呼吸的痛Live.mp3 
     */ 
    ftpClient.sendServer("MKD " + path + "\r\n"); //创建 /media/audio 目录 
    ftpClient.readServerResponse(); 
     
    /*********************************************************** 
     * 如果没有有创建文件夹的权限,则创建文件夹,因此FTP服务器的当前路径下不存在 
     * 那么将文件上传到此FTP服务器的当前路径下 
     * 
     *  如要上传C://audio目录(目录中有 梁静茹-会呼吸的痛Live.mp3 和 林宥嘉-心酸.mp3 两个文件) 
     *  到 FTP服务器上的 /media/ 目录下 
     *  因为FTP服务器上没有 /media/audio 目录,并且FTP服务器当前的目录为 /media 
     *  所以将 C://audio目录下的文件上传到了 /media目录下 
     *  ftpFile.getAbsolutePath():/media/audio 
      remoteFile:/media/梁静茹-会呼吸的痛Live.mp3 
      remoteFile:/media/林宥嘉-心酸.mp3 
     */ 
    //创建一个文件夹对象,检查该文件是否存在 
    File fileRemote=new File(this.localPanel.frame.getFtpPanel().getPwd()+path); //path:audio 
    //该目录不存在 
    if (!fileRemote.exists()) { 
     path=this.localPanel.frame.getFtpPanel().getPwd(); 
    } 
    /***********************************************************/ 
     
    File[] listFiles = file.listFiles(); 
    for (File subFile : listFiles) { 
     Thread.sleep(0, 50); 
     copyFile(subFile, ftpFile); 
    } 
   } 
  } catch (FileNotFoundException e1) { 
   e1.printStackTrace(); 
   System.exit(0); 
   // JOptionPane.showMessageDialog(localPanel, e1.getMessage()); 
  } catch (Exception ex) { 
   ex.printStackTrace(); 
  } 
 } 
</div>

2、下载远程FTP服务器端的文件或文件夹到本地

当用户在远程FTP服务器文件列表中选择想要下载的文件后,点击下载按钮,将服务器上的文件下载至本机,下图为下载子模块流程图。

选择好要下载的文件或文件夹,点击“下载”按钮,会触发com.oyp.ftp.panel.ftp.DownAction类的actionPerformed(ActionEvent e)方法,其主要代码如下<

分享到: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 8 lambda初试示例详解
  • 2017-05-28Java中==运算符与equals方法的区别及intern方法详解
  • 2017-05-28关于Java中的IO流总结(推荐)
  • 2017-05-28Spring Boot(三)之找回熟悉的Controller,Service
  • 2017-05-28java利用java.net.URLConnection发送HTTP请求的方法详解
  • 2017-05-28Java 关键字 速查表介绍
  • 2017-05-28java 对文件夹目录进行深度遍历实例代码
  • 2017-05-28Spring Data JPA 简单查询--方法定义规则(详解)
  • 2017-05-28java实现简单的webservice方式
  • 2017-05-28java后台利用Apache poi 生成excel文档提供前台下载示例

文章分类

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

最近更新的内容

    • 利用Spring boot如何创建简单的web交互应用
    • Java中的HashSet详解和使用示例_动力节点Java学院整理
    • 详解Spring Boot 添加JSP支持
    • Spring Boot启动过程(五)之Springboot内嵌Tomcat对象的start教程详解
    • Java初学者问题图解(动力节点Java学院整理)
    • springMVC4之强大类型转换器实例解析
    • .properties文件读取及占位符${...}替换源码解析
    • MyBatis+MySQL 返回插入的主键ID的方法
    • struts2架构中核心对象的探索—— ActionContext和ServletActionContext
    • java 实现微信服务器下载图片到自己服务器

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

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