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); } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持。