• 技术文章 >Java >java教程

    用java实现FTP本地文件管理模块功能实例(ftp软件开发三)

    Y2JY2J2017-04-21 16:53:32原创1232
    本文为大家分享了FTP本地文件管理模块的实现方法,供大家参考,具体内容如下

    首先看一下界面:


    1、本地文件列表的显示功能

    将本地的当前目录下所有文件显示出来,并显示文件的属性包括文件名、大小、日期、通过javax.swing.JTable()来显示具体的数据。更改当前文件目录会调用com.oyp.ftp.panel.local.LocalPanel类的listLocalFiles()方法,其主要代码如下


     /** 
     * 读取本地文件到表格的方法 
     */ 
    private void listLocalFiles(File selDisk) { 
     if (selDisk == null || selDisk.isFile()) { 
     return; 
     } 
     localSelFilePathLabel.setText(selDisk.getAbsolutePath()); 
     File[] listFiles = selDisk.listFiles(); // 获取磁盘文件列表 
     // 获取表格的数据模型 
     DefaultTableModel model = (DefaultTableModel) localDiskTable.getModel(); 
     model.setRowCount(0); // 清除模型的内容 
     model.addRow(new Object[] { ".", "<DIR>", "" }); // 创建.选项 
     model.addRow(new Object[] { "..", "<DIR>", "" }); // 创建..选项 
     if (listFiles == null) { 
     JOptionPane.showMessageDialog(this, "该磁盘无法访问"); 
     return; 
     } 
     // 遍历磁盘根文件夹的内容,添加到表格中 
     for (File file : listFiles) { 
     File diskFile = new DiskFile(file); // 创建文件对象 
     String length = file.length() + "B "; // 获取文件大小 
     if (file.length() > 1000 * 1000 * 1000) { // 计算文件G单位 
     length = file.length() / 1000000000 + "G "; 
     } 
     if (file.length() > 1000 * 1000) { // 计算文件M单位 
     length = file.length() / 1000000 + "M "; 
     } 
     if (file.length() > 1000) { 
     length = file.length() / 1000 + "K "; // 计算文件K单位 
     } 
     if (file.isDirectory()) { // 显示文件夹标志 
     length = "<DIR>"; 
     } 
     // 获取文件的最后修改日期 
     String modifDate = new Date(file.lastModified()).toLocaleString(); 
     if (!file.canRead()) { 
     length = "未知"; 
     modifDate = "未知"; 
     } 
     // 将单个文件的信息添加到表格的数据模型中 
     model.addRow(new Object[] { diskFile, length, modifDate }); 
     } 
     localDiskTable.clearSelection(); // 取消表格的选择项 
    }

    2、本地文件列表的刷新功能

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


    /** 
     * 刷新本地资源列表的动作处理器的事件处理方法 
     */ 
     @Override 
     public void actionPerformed(ActionEvent e) { 
     this.localPanel.refreshCurrentFolder(); // 调用管理面板的刷新方法 
     }

    上面的响应事件会调用com.oyp.ftp.panel.local.LocalPanel类的refreshCurrentFolder()方法,其具体代码如下


     /** 
     * 刷新指定文件夹的方法 
     */ 
    void refreshFolder(File file) { 
     listLocalFiles(file); 
    } 
     
    /** 
     * 刷新本地当前文件夹的方法 
     */ 
    public void refreshCurrentFolder() { 
     final File file = getCurrentFolder(); // 获取当前文件夹 
     Runnable runnable = new Runnable() { // 创建新的线程 
     public void run() { 
     listLocalFiles(file); // 重载当前文件夹的列表到表格中 
     } 
     }; 
     //导致 runnable 的 run 方法在 EventQueue 的指派线程上被调用。 
     SwingUtilities.invokeLater(runnable); // 在事件线程中调用该线程对象 
    }

    3、 新建本地文件夹功能

    点击“新建文件夹”按钮,会触发com.oyp.ftp.panel.local.CreateFolderAction类的actionPerformed(ActionEvent e)方法,然后弹出一个对话框,填写要新建的文件夹名称,选择“确定”,“取消”按钮结束。其主要代码如下


    /** 
     * 创建文件夹按钮的动作处理器的动作事件的方法 
     */ 
     @Override 
     public void actionPerformed(ActionEvent e) { 
     // 使用输入对话框接收用户输入的文件夹名称 
     String folderName = JOptionPane.showInputDialog("请输入文件夹名称:"); 
     if (folderName == null) 
     return; 
     File curFolder = null; 
     // 获取本地资源表格的当前选择行号 
     int selRow = localPanel.localDiskTable.getSelectedRow(); 
     if (selRow < 0) { 
     // 创建当前文件夹对象 
     curFolder = new File(localPanel.localSelFilePathLabel.getText()); 
     } else { 
     // 获取表格选择行的第一个单元值 
     Object value = localPanel.localDiskTable.getValueAt(selRow, 0); 
     if (value instanceof File) { // 如果单元值是文件,则获取文件的上级文件夹 
     curFolder = (File) value; 
     if (curFolder.getParentFile() != null) 
      curFolder = curFolder.getParentFile(); 
     } else 
     // 否则根据界面的路径标签创建当前文件夹对象 
     curFolder = new File(localPanel.localSelFilePathLabel.getText()); 
     } 
     // 创建当前文件夹下的新文件夹对象 
     File tempFile = new File(curFolder, folderName); 
     if (tempFile.exists()) {// 如果存在相同文件或文件夹 
     JOptionPane.showMessageDialog(localPanel, folderName 
      + "创建失败,已经存在此名称的文件夹或文件。", "创建文件夹", 
      JOptionPane.ERROR_MESSAGE);// 提示用户名称已存在 
     return; // 结束本方法 
     } 
     if (tempFile.mkdir()) // 创建文件夹 
     JOptionPane.showMessageDialog(localPanel, folderName + "文件夹,创建成功。", 
      "创建文件夹", JOptionPane.INFORMATION_MESSAGE); 
     else 
     JOptionPane.showMessageDialog(localPanel, folderName + "文件夹无法被创建。", 
      "创建文件夹", JOptionPane.ERROR_MESSAGE); 
     this.localPanel.refreshFolder(curFolder);// 刷新文件夹 
     }

    4、删除本地文件功能

    选择好要删除的文件或文件夹,点击“删除”按钮,会触发com.oyp.ftp.panel.local.DelFileAction类的actionPerformed(ActionEvent e)方法,然后弹出一个对话框,选择“是”,“否”,“取消”按钮结束。其主要代码如下


    /** 
     * 删除本地文件的动作处理器的处理动作事件的方法 
     */ 
     public void actionPerformed(ActionEvent e) { 
     // 获取表格选择的所有行 
     final int[] selRows = this.localPanel.localDiskTable.getSelectedRows(); 
     if (selRows.length < 1) // 如果没有选择表格内容 
     return; // 结束该方法 
     int confirmDialog = JOptionPane.showConfirmDialog(localPanel, 
     "确定要执行删除吗?"); // 用户确认是否删除 
     if (confirmDialog == JOptionPane.YES_OPTION) { // 如果用于同意删除 
     Runnable runnable = new Runnable() { // 创建线程 
     /** 
      * 删除文件的递归方法 
      * 
      * @param file 
      * 要删除的文件对象 
      */ 
     private void delFile(File file) { 
      try { 
      if (file.isFile()) { // 如果删除的是文件 
      boolean delete = file.delete(); // 调用删该文件的方法 
      if (!delete) { 
      JOptionPane.showMessageDialog(localPanel, file 
       .getAbsoluteFile() 
       + "文件无法删除。", "删除文件", 
       JOptionPane.ERROR_MESSAGE); 
      return; 
      } 
      } else if (file.isDirectory()) { // 如果删除的是文件夹 
      File[] listFiles = file.listFiles();// 获取该文件夹的文件列表 
      if (listFiles.length > 0) { 
      for (File subFile : listFiles) { 
       delFile(subFile); // 调用递归方法删除该列表的所有文件或文件夹 
      } 
      } 
      boolean delete = file.delete();// 最后删除该文件夹 
      if (!delete) { // 如果成功删除 
      JOptionPane.showMessageDialog(localPanel, file 
       .getAbsoluteFile() 
       + "文件夹无法删除。", "删除文件", 
       JOptionPane.ERROR_MESSAGE); 
      return; // 返回方法的调用处 
      } 
      } 
      } catch (Exception ex) { 
      Logger.getLogger(LocalPanel.class.getName()).log( 
      Level.SEVERE, null, ex); 
      } 
     } 
     
     /** 
      * 线程的主体方法 
      * 
      * @see java.lang.Runnable#run() 
      */ 
     public void run() { 
      File parent = null; 
      // 遍历表格的选择内容 
      for (int i = 0; i < selRows.length; i++) { 
      // 获取每个选择行的第一列单元内容 
      Object value = DelFileAction.this.localPanel.localDiskTable 
      .getValueAt(selRows[i], 0); 
      // 如果该内容不是DiskFile类的实例对象 
      if (!(value instanceof DiskFile)) 
      continue; // 结束本次循环 
      DiskFile file = (DiskFile) value; 
      if (parent == null) 
      parent = file.getParentFile(); // 获取选择文件的上级文件夹 
      if (file != null) { 
      delFile(file); // 调用递归方法删除选择内容 
      } 
      } 
      // 调用refreshFolder方法刷新当前文件夹 
      DelFileAction.this.localPanel.refreshFolder(parent); 
      JOptionPane.showMessageDialog(localPanel, "删除成功。"); 
     } 
     }; 
     new Thread(runnable).start(); // 创建并启动这个线程 
     } 
     }

    5、重命名本地文件功能

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


    /** 
     * 重命名动作的事件处理方法 
     */ 
     @Override 
     public void actionPerformed(ActionEvent e) { 
     // 获取本地资源表格的选择行号 
     int selRow = this.localPanel.localDiskTable.getSelectedRow(); 
     if (selRow < 0) 
     return; 
     // 获取选择行的第一个单元值 
     Object value = this.localPanel.localDiskTable.getValueAt(selRow, 0); 
     if (!(value instanceof File)) 
     return; 
     // 将该单元值转换为File类的对象 
     File file = (File) value; 
     // 使用对话框接收用户如入的新文件名 
     String fileName = JOptionPane 
     .showInputDialog("请输入新文件名", file.getName()); 
     if (fileName == null) 
     return; 
     // 创建新名称的文件 
     File renFile = new File(file.getParentFile(), fileName); 
     boolean isRename = file.renameTo(renFile); // 将原文件重命名 
     // 刷新文件夹 
     this.localPanel.refreshFolder(file.getParentFile()); 
     if (isRename) { 
     JOptionPane.showMessageDialog(this.localPanel, "重命名为" + fileName 
      + "成功。"); 
     } else { 
     JOptionPane.showMessageDialog(this.localPanel, "无法重命名为" + fileName 
      + "。", "文件重命名", JOptionPane.ERROR_MESSAGE); 
     } 
     }

    以上就是用java实现FTP本地文件管理模块功能实例(ftp软件开发三)的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:用java实现FTP上传下载队列窗口功能(ftp软件开发二) 下一篇:用java实现简单FTP远程文件管理的功能(ftp软件开发四)

    相关文章推荐

    • JAVA-5NIO之Selector• java对象的序列化和反序列化• Java基础之类和对象、单例模式、继承• json转换成java对象示例• 13个不容错过的Java项目

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网