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

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

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

(0)

相关推荐

  • Java 解决读写本地文件中文乱码的问题

    Java 解决读写本地文件中文乱码的问题 前言: 在用Java程序进行读写含中文的txt文件时,经常会出现读出或写入的内容会出现乱码.原因其实很简单,就是系统的编码和程序的编码采用了不同的编码格式.通常,假如自己不修改的话,windows自身采用的编码格式是gbk(而gbk和gb2312基本上是一样的编码方式),而IDE中Encode不修改的话,默认是utf-8的编码,这就是为什么会出现乱码的原因.当在OS下手工创建并写入的txt文件(gbk),用程序直接去读(utf-8),就会乱码.为了避免可

  • java 读取本地文件实例详解

    java 读取本地文件实例详解 用javax.xml.w3c解析 实例代码: package cn.com.xinli.monitor.utils; import org.w3c.dom.Document; import org.w3c.dom.Element; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import java.io.File; /** *

  • 详解Java读取本地文件并显示在JSP文件中

    详解Java读取本地文件并显示在JSP文件中 当我们初学IMG标签时,我们知道通过设置img标签的src属性,能够在页面中显示想要展示的图片.其中src的值,可以是磁盘目录上的绝对,也可以是项目下的相对路径,还可以是网络上的图片路径.在存取少量图片的情况下,采用相对路径存储图片的情况下最方便,也最实用.但是当图片数量过多时,这种方式就显的有些掣肘了. 当系统的图片数量过多时,如果仍把这些图片当做项目的一部分去发布,势必会大大延长项目的发布时间及更新时间.对于某些对于时限性要求特别高的系统来说,采

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

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

  • 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语言实现简单的酒店前台管理小功能(实例代码)

    笔者是一名刚上路的小萌新,有什么问题希望大家可以指正! 以下为题目: 为某个酒店编写程序:酒店管理系统,模拟订房.退房.打印所有房间状态等功能. 1.该系统的用户是:酒店前台. 2.酒店使用一个二维数组来模拟."Room[][] rooms;" 3.酒店中的每一个房间应该是一个java对象:Room 4.每一个房间Room应该有:房间编号.房间类型.房间是否空闲. 5.系统应该对外提供的功能: 可以预定房间:用户输入房间编号,订房. 可以退房:用户输入房间编号,退房. 可以查看所有房间

  • 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 jav

  • 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连接管理模块实现(8)

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

随机推荐