Java语言实现简单FTP软件 FTP软件本地窗口实现(5)

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

1、首先看一下本地窗口的布局效果

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

3、本地窗口的具体实现代码LocalPanel.java

package com.oyp.ftp.panel.local; 

import java.awt.Color;
import java.awt.Desktop;
import java.awt.Dimension;
import java.awt.event.ItemEvent;
import java.io.File;
import java.io.IOException;
import java.util.Date;
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.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
import javax.swing.table.TableStringConverter; 

import com.oyp.ftp.FTPClientFrame;
import com.oyp.ftp.panel.FTPTableCellRanderer;
import com.oyp.ftp.panel.ftp.TableConverter;
import com.oyp.ftp.utils.DiskFile;
public class LocalPanel extends javax.swing.JPanel { 

  Queue<Object[]> queue = new LinkedList<Object[]>();
  private UploadThread uploadThread = null;
  private Desktop desktop = null;
  private javax.swing.JButton createFolderButton;
  private javax.swing.JButton delButton;
  private javax.swing.JScrollPane scrollPane;
  private javax.swing.JToolBar.Separator jSeparator1;
  private javax.swing.JToolBar toolBar;
  private javax.swing.JComboBox localDiskComboBox;
  javax.swing.JTable localDiskTable;
  javax.swing.JLabel localSelFilePathLabel;
  private javax.swing.JButton renameButton;
  private javax.swing.JButton uploadButton;
  private TableRowSorter<TableModel> sorter;
  FTPClientFrame frame = null; 

  public LocalPanel() {
    initComponents();
  } 

  public LocalPanel(FTPClientFrame client_Frame) {
    frame = client_Frame;
    if (Desktop.isDesktopSupported()) {
      desktop = Desktop.getDesktop();
    }
    initComponents();
  } 

  /**
   * 界面布局与初始化方法
   */
  private void initComponents() {
    ActionMap actionMap = getActionMap();
    actionMap.put("delAction", new DelFileAction(this, "删除", null));
    actionMap.put("renameAction", new RennameAction(this, "重命名", null));
    actionMap.put("createFolderAction", new CreateFolderAction(this,
        "新建文件夹", null));
    actionMap.put("uploadAction", new UploadAction(this, "上传", null));
    actionMap.put("refreshAction", new RefreshAction(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();
    uploadButton = new javax.swing.JButton();
    jSeparator1 = new javax.swing.JToolBar.Separator();
    localDiskComboBox = new javax.swing.JComboBox();
    localDiskComboBox.setPreferredSize(new Dimension(100, 25));
    scrollPane = new javax.swing.JScrollPane();
    localDiskTable = new javax.swing.JTable();
    localDiskTable.setDragEnabled(true);
    localSelFilePathLabel = new javax.swing.JLabel();
    /**
     * 向现有边框添加一个标题,使其具有指定的位置和默认字体和文本颜色(由当前外观确定)。
     * TitledBorder.CENTER: 将标题文本置于边框线的中心。
     * TitledBorder.ABOVE_TOP: 将标题置于边框顶端线的上部。
     */
    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.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); 

    uploadButton.setText("上传");
    uploadButton.setFocusable(false);
    uploadButton.setAction(actionMap.get("uploadAction"));
    toolBar.add(uploadButton); 

    JButton refreshButton = new JButton();
    refreshButton.setText("刷新");
    refreshButton.setFocusable(false);
    refreshButton.setAction(actionMap.get("refreshAction"));
    toolBar.add(refreshButton);
    toolBar.add(jSeparator1); 

    //File.listRoots():列出可用的文件系统根。
    localDiskComboBox.setModel(new DefaultComboBoxModel(File.listRoots()));
    localDiskComboBox.addItemListener(new java.awt.event.ItemListener() {
      public void itemStateChanged(java.awt.event.ItemEvent evt) {
        localDiskComboBoxItemStateChanged(evt);
      }
    });
    toolBar.add(localDiskComboBox); 

    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 1;
    gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
    gridBagConstraints.weightx = 1.0;
    add(toolBar, gridBagConstraints);
    localDiskTable.setModel(new LocalTableModel());
    localDiskTable.setShowHorizontalLines(false);
    localDiskTable.setShowVerticalLines(false);
    localDiskTable.getTableHeader().setReorderingAllowed(false);
    localDiskTable.addMouseListener(new java.awt.event.MouseAdapter() {
      public void mouseClicked(java.awt.event.MouseEvent evt) {
        localDiskTableMouseClicked(evt);
      }
    });
    scrollPane.setViewportView(localDiskTable);
    scrollPane.getViewport().setBackground(Color.WHITE);
    //设置渲染本地资源和FTP资源表格组件的渲染器
    localDiskTable.getColumnModel().getColumn(0).setCellRenderer(
        FTPTableCellRanderer.getCellRanderer());
    //RowSorter 的一个实现,它使用 TableModel 提供排序和过滤操作。
    sorter = new TableRowSorter<TableModel>(localDiskTable.getModel());
    TableStringConverter converter = new TableConverter();
    //设置负责将值从模型转换为字符串的对象。
    sorter.setStringConverter(converter);
    //设置 RowSorter。RowSorter 用于提供对 JTable 的排序和过滤。
    localDiskTable.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); 

    localSelFilePathLabel.setBorder(javax.swing.BorderFactory
        .createEtchedBorder());
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 3;
    gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
    add(localSelFilePathLabel, gridBagConstraints);
  } 

  /**
   * 本地磁盘下拉选择框的选项改变事件处理方法,由事件监听器调用
   */
  private void localDiskComboBoxItemStateChanged(java.awt.event.ItemEvent evt) {
    if (evt.getStateChange() == ItemEvent.SELECTED) {
      Object item = evt.getItem(); // 获取选择的下拉列表的选项
      if (item instanceof File) { // 如果该选项是File类的实例对象
        File selDisk = (File) item; // 将该选项转换成File类
        // 调用listLocalFiles()方法,显示该File类指定的磁盘文件列表
        listLocalFiles(selDisk);
      }
    }
  } 

  /**
   * 刷新指定文件夹的方法
   */
  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); // 在事件线程中调用该线程对象
  } 

  /**
   * 获取当前文件夹
   */
  public File getCurrentFolder() {
    // 使用路径标签的路径创建当前文件夹对象
    File file = new File(localSelFilePathLabel.getText());
    // 如果表格选择了文件夹,或选择的文件有真是的上级文件夹
    if (localDiskTable.getSelectedRow() > 1 && file.getParentFile() != null)
      file = file.getParentFile(); // 获取该上级文件夹
    return file; // 返回文件夹对象
  } 

  /**
   * 本地磁盘文件的表格单击和双击事件处理方法
   */
  private void localDiskTableMouseClicked(java.awt.event.MouseEvent evt) {
    int selectedRow = localDiskTable.getSelectedRow(); // 获取选择的表格行号
    if (selectedRow < 0)
      return;
    // 获取表格中选择的当前行的第一个字段的值
    Object value = localDiskTable.getValueAt(selectedRow, 0);
    if (value instanceof DiskFile) { // 如果该值是DiskFile的实例对象
      DiskFile selFile = (DiskFile) value;
      // 设置状态栏的本地文件路径
      localSelFilePathLabel.setText(selFile.getAbsolutePath());
      if (evt.getClickCount() >= 2) { // 如果是双击鼠标
        if (selFile.isDirectory()) { // 并且选择的是文件夹
          listLocalFiles(selFile); // 显示该文件夹的内容列表
        } else if (desktop != null) { // 如果不是文件夹
          try {
            desktop.open(selFile); // 关联本地系统程序打开该文件
          } catch (IOException ex) {
            Logger.getLogger(FTPClientFrame.class.getName()).log(
                Level.SEVERE, null, ex);
          }
        }
      }
    } else { // 如果选择的表格内容不是DiskFile类的实例
      // 判断选择的是不是..选项
      if (evt.getClickCount() >= 2 && value.equals("..")) {
        // 创建当前选择文件的临时文件
        File tempFile = new File((localSelFilePathLabel.getText()));
        // 显示选择的文件的上级目录列表
        listLocalFiles(tempFile.getParentFile());
      }
    }
  } 

  /**
   * 读取本地文件到表格的方法
   */
  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(); // 取消表格的选择项
  } 

  /**
   * 停止文件上传线程的方法
   */
  public void stopUploadThread() {
    if (uploadThread != null)
      uploadThread.stopThread();
  } 

  public javax.swing.JComboBox getLocalDiskComboBox() {
    return localDiskComboBox;
  } 

  /**
   * 设置FTP连接,并启动上传队列线程的方法。
   */
  public void setFtpClient(String server, int port, String userStr,
      String passStr) {
    if (uploadThread != null)
      uploadThread.stopThread();
    uploadThread = new UploadThread(this, server, port, userStr, passStr);
    uploadThread.start();
  } 

  public Queue<Object[]> getQueue() {
    return queue;
  }
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2017-03-30

Java语言实现简单FTP软件 FTP本地文件管理模块实现(9)

本文为大家分享了FTP本地文件管理模块的实现方法,供大家参考,具体内容如下 首先看一下界面: 1.本地文件列表的显示功能 将本地的当前目录下所有文件显示出来,并显示文件的属性包括文件名.大小.日期.通过javax.swing.JTable()来显示具体的数据.更改当前文件目录会调用com.oyp.ftp.panel.local.LocalPanel类的listLocalFiles()方法,其主要代码如下 /** * 读取本地文件到表格的方法 */ private void listLocalFi

Java语言实现简单FTP软件 FTP上传下载队列窗口实现(7)

本文为大家介绍了FTP上传下载队列窗口的实现方法,供大家参考,具体内容如下 1.首先看一下队列窗口的界面 2.看一下上传队列窗口的界面 3.看一下下载队列窗口的界面 package com.oyp.ftp.panel.queue; import static java.awt.BorderLayout.CENTER; import static java.awt.BorderLayout.EAST; import static javax.swing.ListSelectionModel.SIN

java判断ftp目录是否存在的方法

本文为大家分享了java判断ftp目录是否存在的方法,供大家参考,具体内容如下 package com.soft4j.log4j; import java.io.IOException; import sun.net.ftp.FtpClient; public class FtpTest { static String middle_ftpServer = "10.103.2.250"; static String middle_user = "ora9iftp";

Java 实现FTP服务实例详解

Java 实现FTP服务实例详解 1.FTP简介 FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文传协议".用于Internet上的控制文件的双向传输.同时,它也是一个应用程序(Application).基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件.在FTP的使用当中,用户经常遇到两个概念:"下载"(Download)和"上传"(Upload)."

JAVA SFTP文件上传、下载及批量下载实例

1.jsch官方API查看地址(附件为需要的jar) http://www.jcraft.com/jsch/ 2.jsch简介 JSch(Java Secure Channel)是一个SSH2的纯Java实现.它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功能到你自己的应用程序. SFTP(Secure File Transfer Protocol)安全文件传送协议.可以为传输文件提供一种安全的加密方法.SFTP 为 SSH的一部份,是一种传输

Java语言实现简单FTP软件 FTP连接管理模块实现(8)

本文为大家介绍了FTP连接管理模块的实现方法,供大家参考,具体内容如下 (1)FTP连接 运行FTP客户端后,首先是连接FTP服务器,需要输入FTP服务器的IP地址及用户名.密码以及端口号后点击连接按钮开始连接FTP服务器,连接流程图如下图所示. 点击"连接"按钮后,会调用com.oyp.ftp.FTPClientFrame类的linkButtonActionPerformed(ActionEvent evt)方法,其主要代码程序如下 /** * 连接按钮的事件处理方法 */ riva

Java语言实现简单FTP软件 FTP软件主界面(4)

首先看一下FTP软件的整体代码框架,具体内容如下 1.首先介绍程序的主入口FTPMain.java,采用了一个漂亮的外观风格 package com.oyp.ftp; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.UIManager; import com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel; public class F

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

本文为大家分享了FTP上传下载管理模块的实现方法,供大家参考,具体内容如下 1.上传本地文件或文件夹到远程FTP服务器端的功能. 当用户在本地文件列表中选择想要上传的文件后,点击上传按钮,将本机上指定的文件上传到FTP服务器当前展现的目录,下图为上传子模块流程图 选择好要上传的文件或文件夹,点击"上传"按钮,会触发com.oyp.ftp.panel.local.UploadAction类的actionPerformed(ActionEvent e)方法,其主要代码如下 /** * 上传

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

本文为大家介绍了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;

Java语言实现简单FTP软件 FTP软件效果图预览之上传功能(3)

下面展示一下FTP软件上传功能的过程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 1.上传前 上传前选择好要将文件或文件夹上传到远程FTP服务器的哪个目的目录下. 2.上传中 添加上传任务 上传任务完成进度显示 3.上传完成 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们.

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

本文为大家分享了FTP远程文件管理模块的实现方法,供大家参考,具体内容如下 首先看一下界面: 1.远程FTP服务器端的文件列表的显示 将远程的当前目录下所有文件显示出来,并显示文件的属性包括文件名.大小.日期.通过javax.swing.JTable()来显示具体的数据.更改当前文件目录会调用com.oyp.ftp.panel.ftp.FtpPanel类的listFtpFiles(final TelnetInputStream list)方法,其主要代码如下 /** * 读取FTP文件到表格的方

Java语言实现简单FTP软件 辅助功能模块FTP站点管理实现(12)

本文为大家分享了辅助功能模块FTP站点管理的实现方法,供大家参考,具体内容如下 1.FTP站点管理 点击"FTP站点管理"按钮,弹出对话框"FTP站点管理",如下图 1) 连接站点 在FTP站点管理面板上选好要连接的站点,点击"连接"按钮,则会将主机地址.端口号.用户名好,并将密码清空,如下图 到其主要代码如下 if (command.equals("link")) { // 如果单击的是连接按钮 frame.setLinkI

Java语言实现简单FTP软件 FTP协议分析(1)

FTP(File Transfer Protocol)就是文件传输协议.通过FTP客户端从远程FTP服务器上拷贝文件到本地计算机称为下载,将本地计算机上的文件复制到远程FTP服务器上称为上传,上传和下载是FTP最常用的两个功能.FTP使用传输层的TCP协议进行传输,因此客户端与服务器之间的连接是可靠的,而且是面向连接,为数据的传输提供了可靠的保证.FTP的目标有以下目标: 提高文件的共享性 提供非直接地远程操纵计算机 避免用户因主机之间的文件存储系统的差异而导致的变化 为数据的传送提供可靠性和高