Java语言实现简单FTP软件 FTP本地文件管理模块实现(9)
发布时间 - 2026-01-11 00:29:02 点击率:次本文为大家分享了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
# 本地文件
# Java中文件管理系统FastDFS详解
# java property配置文件管理工具框架过程详解
# java使用JSCH实现SFTP文件管理
# Java语言实现简单FTP软件 FTP远程文件管理模块实现(10)
# 详解Java的文件与目录管理以及输入输出相关操作
# java编写的文件管理器代码分享
# Java实战之简单的文件管理器
# 递归
# 重命名
# 其主要
# 行号
# 文件列表
# 对话框
# 的是
# 第一个
# 遍历
# 请输入
# 弹出
# 命名为
# 在此
# 如果没有
# 看一下
# 大家分享
# 转换为
# 将该
# 该文件
# 具体内容
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】
Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能
js实现点击每个li节点,都弹出其文本值及修改
如何在阿里云高效完成企业建站全流程?
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
zabbix利用python脚本发送报警邮件的方法
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
iOS中将个别页面强制横屏其他页面竖屏
JavaScript如何实现错误处理_try...catch如何捕获异常?
nodejs redis 发布订阅机制封装实现方法及实例代码
Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】
如何用免费手机建站系统零基础打造专业网站?
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化
Laravel如何实现模型的全局作用域?(Global Scope示例)
微信小程序 五星评分(包括半颗星评分)实例代码
轻松掌握MySQL函数中的last_insert_id()
魔毅自助建站系统:模板定制与SEO优化一键生成指南
Android 常见的图片加载框架详细介绍
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
如何快速查询网址的建站时间与历史轨迹?
济南网站建设制作公司,室内设计网站一般都有哪些功能?
如何在宝塔面板中修改默认建站目录?
Laravel如何使用查询构建器?(Query Builder高级用法)
如何制作一个表白网站视频,关于勇敢表白的小标题?
网站制作软件免费下载安装,有哪些免费下载的软件网站?
Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】
EditPlus中的正则表达式 实战(4)
JavaScript如何实现类型判断_typeof和instanceof有什么区别
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
使用C语言编写圣诞表白程序
怎么用AI帮你设计一套个性化的手机App图标?
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
如何正确下载安装西数主机建站助手?
JavaScript如何实现路由_前端路由原理是什么
如何在建站之星绑定自定义域名?
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】
如何用腾讯建站主机快速创建免费网站?
Android GridView 滑动条设置一直显示状态(推荐)
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
长沙做网站要多少钱,长沙国安网络怎么样?
利用JavaScript实现拖拽改变元素大小
黑客如何利用漏洞与弱口令入侵网站服务器?
Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解
如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
Windows Hello人脸识别突然无法使用
详解jQuery中基本的动画方法
iOS发送验证码倒计时应用

