程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java語言實現簡單FTP軟件 FTP本地文件管理模塊實現(9)

Java語言實現簡單FTP軟件 FTP本地文件管理模塊實現(9)

編輯:關於JAVA

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved