首先看一下界面:

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);
}
}

==================================================================================================

  作者:欧阳鹏  欢迎转载,与人分享是进步的源泉!

  转载请保留原文地址:http://blog.csdn.net/ouyang_peng

===================================================================================================

Java语言实现简单FTP软件------>本地文件管理模块的实现(九)的更多相关文章

  1. Java语言实现简单FTP软件------>远程文件管理模块的实现(十)

    首先看一下界面: 1.远程FTP服务器端的文件列表的显示 将远程的当前目录下所有文件显示出来,并显示文件的属性包括文件名.大小.日期.通过javax.swing.JTable()来显示具体的数据.更改 ...

  2. Java语言实现简单FTP软件------>连接管理模块的实现:主机与服务器之间的连接与关闭操作(八)

    (1)FTP连接 运行FTP客户端后,首先是连接FTP服务器,需要输入FTP服务器的IP地址及用户名.密码以及端口号后点击连接按钮开始连接FTP服务器,连接流程图如下图所示. 点击"连接&q ...

  3. Java语言实现简单FTP软件------>源码放送(十三)

    Java语言实现简单FTP软件------>FTP协议分析(一) Java语言实现简单FTP软件------>FTP软件效果图预览之下载功能(二) Java语言实现简单FTP软件----- ...

  4. Java语言实现简单FTP软件------>上传下载管理模块的实现(十一)

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

  5. Java语言实现简单FTP软件------>FTP软件主界面的实现(四)

    首先看一下该软件的整体代码框架                        1.首先介绍程序的主入口FTPMain.java,采用了一个漂亮的外观风格 package com.oyp.ftp; im ...

  6. Java语言实现简单FTP软件------>FTP软件本地窗口的实现(五)

    1.首先看一下本地窗口的布局效果 2.看一下本地窗口实现的代码框架 2.本地窗口的具体实现代码LocalPanel.java package com.oyp.ftp.panel.local; impo ...

  7. Java语言实现简单FTP软件------>FTP软件远程窗口的实现(六)

    1.首先看一下远程窗口的布局效果 2.看一下本地窗口实现的代码框架 3.远程窗口主要实现代码FtpPanel.java package com.oyp.ftp.panel.ftp; import ja ...

  8. Java语言实现简单FTP软件------>上传下载队列窗口的实现(七)

    1.首先看一下队列窗口的界面 2.看一下上传队列窗口的界面 3.看一下下载队列窗口的界面 4.队列窗口的实现 package com.oyp.ftp.panel.queue; import stati ...

  9. Java语言实现简单FTP软件------>FTP软件效果图预览之下载功能(二)

    介绍完FTP协议后,来看看该软件完成后的效果图 客户端的主界面如上图所示,主要是分为以下几个界面: 数据输入界面:用来让用户输入服务器的地址,用户名,密码,端口号等. 站点菜单.本地菜单.远程菜单以及 ...

随机推荐

  1. MSSQL数据库导入导出大全二(SQL语句)

    Excel文件导入数据库多个Sheet if exists(select 1 from sysobjects where name=N'p_import_excel' and type='P')dro ...

  2. 【Excle】在重复数据中对日期排序并查询最新的一条记录

    现在存在以下数据: 需要查询出以下数据 姓名       日期 张三       2017-12-14 李四       2017-12-16 在E1中写入以下公式:=IF(D2=MAX(IF($C$ ...

  3. R 介绍

    R定义:一个能够自由有效地用于统计计算和绘图的语言和环境,它提供了广泛的统计分析和绘图技术. R语言的使用很大程度上可以说是借助各种各种各样R包的辅助,从某种程度上说,运用R的插件来满足不同的需求. ...

  4. ajax读取文件内容

    读取json文件 $.ajax({ url: 'manifest.webapp', type: 'GET', dataType: 'json',//类型不对会出错 timeout: 1000, //设 ...

  5. IBM Rational Appscan使用之扫描结果分析

    转自:http://www.nxadmin.com/penetration/825.html 之前有IBM Rational Appscan使用详细说明的一篇文章,主要是针对扫描过程中配置设置等.本文 ...

  6. 在Java中怎样高效的推断数组中是否包括某个元素

    来自 http://www.hollischuang.com/archives/1269? 怎样检查一个数组(无序)是否包括一个特定的值?这是一个在Java中经经常使用到的并且非常实用的操作.同一时候 ...

  7. angularjs事件传递$on、$emit和$broadcast

    如何在作用域之间通信呢? 1.创建一个单例服务,然后通过这个服务处理所有子作用域的通信. 2.通过作用域中的事件处理通信.但是这种方法有一些限制:例如,你并不能广泛的将事件传播到所有监控的作用域中.你 ...

  8. linux上复制行到另一个文件

    1.复制3行到5行数据到ab.sh文件,不覆盖ab.sh文件中的已有内容 :3,5w>>ab.sh 2.复制3行到5行数据到ab.sh文件,覆盖ab.sh文件中的已有内容 :3,5w!ab ...

  9. mv 命令 简要

    1.mv  test.txt    test1.txt 给文件重命名 2.mv   test.txt   aaDir   将test.txt文件移动到aaDir文件夹中 3.mv   -t  /hom ...

  10. k8s集群容器监控

    硬件环境: 两台虚拟机, 10.10.20.203 部署docker.etcd.flannel.kube-apiserver.kube-controller-manager.kube-schedule ...