Java語言實現簡單FTP軟件 FTP本地文件管理模塊實現(9)。本站提示廣大學習愛好者:(Java語言實現簡單FTP軟件 FTP本地文件管理模塊實現(9))文章只能為提供參考,不一定能成為您想要的結果。以下是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);
}
}
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持。