十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶(hù) + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專(zhuān)業(yè)推廣+無(wú)憂(yōu)售后,網(wǎng)站問(wèn)題一站解決
本文為大家分享了FTP遠(yuǎn)程文件管理模塊的實(shí)現(xiàn)方法,供大家參考,具體內(nèi)容如下
成都創(chuàng)新互聯(lián)堅(jiān)持網(wǎng)頁(yè)設(shè)計(jì),我們不會(huì)倒閉、轉(zhuǎn)行,已經(jīng)持續(xù)穩(wěn)定運(yùn)營(yíng)十年。專(zhuān)業(yè)的建站公司技術(shù),豐富的成功經(jīng)驗(yàn)和創(chuàng)作思維,提供一站式互聯(lián)網(wǎng)解決方案,攜手廣大客戶(hù),共同發(fā)展進(jìn)步。我們不僅會(huì)設(shè)計(jì)網(wǎng)站,更會(huì)成都營(yíng)銷(xiāo)網(wǎng)站建設(shè)。幫助中小型企業(yè)在“互聯(lián)網(wǎng)+"的時(shí)代里通過(guò)推廣營(yíng)銷(xiāo)傳播路線(xiàn)轉(zhuǎn)型升級(jí),累計(jì)幫助多家客戶(hù)實(shí)現(xiàn)網(wǎng)絡(luò)營(yíng)銷(xiāo)化,與我們一起攜手共創(chuàng)未來(lái)!
首先看一下界面:

1、遠(yuǎn)程FTP服務(wù)器端的文件列表的顯示
將遠(yuǎn)程的當(dāng)前目錄下所有文件顯示出來(lái),并顯示文件的屬性包括文件名、大小、日期、通過(guò)javax.swing.JTable()來(lái)顯示具體的數(shù)據(jù)。更改當(dāng)前文件目錄會(huì)調(diào)用com.oyp.ftp.panel.ftp.FtpPanel類(lèi)的listFtpFiles(final TelnetInputStream list)方法,其主要代碼如下
/**
* 讀取FTP文件到表格的方法
* @param list
* 讀取FTP服務(wù)器資源列表的輸入流
*/
public synchronized void listFtpFiles(final TelnetInputStream list) {
// 獲取表格的數(shù)據(jù)模型
final DefaultTableModel model = (DefaultTableModel) ftpDiskTable
.getModel();
model.setRowCount(0);
// 創(chuàng)建一個(gè)線(xiàn)程類(lèi)
Runnable runnable = new Runnable() {
public synchronized void run() {
ftpDiskTable.clearSelection();
try {
String pwd = getPwd(); // 獲取FTP服務(wù)器的當(dāng)前文件夾
model.addRow(new Object[] { new FtpFile(".", pwd, true),
"", "" }); // 添加“.”符號(hào)
model.addRow(new Object[] { new FtpFile("..", pwd, true),
"", "" }); // 添加“..”符號(hào)
byte[]names=new byte[2048];
int bufsize=0;
bufsize=list.read(names, 0, names.length);
int i=0,j=0;
while(i2、刷新遠(yuǎn)程FTP服務(wù)器端的文件列表
點(diǎn)擊“刷新”按鈕,會(huì)觸發(fā)com.oyp.ftp.panel.ftp.RefreshAction類(lèi)的actionPerformed(ActionEvent e)方法,其主要代碼如下
/** 刷新按鈕的動(dòng)作處理器動(dòng)作的事件處理方法 **/
@Override
public void actionPerformed(ActionEvent e) {
ftpPanel.refreshCurrentFolder(); // 調(diào)用刷新FTP資源列表的方法
}
上面的響應(yīng)事件會(huì)調(diào)用com.oyp.ftp.panel.ftp.FtpPanel類(lèi)的refreshCurrentFolder()方法,其主要代碼如下
/** 刷新FTP資源管理面板的當(dāng)前文件夾**/
public void refreshCurrentFolder() {
try {
// 獲取服務(wù)器文件列表
TelnetInputStream list = ftpClient.list();
listFtpFiles(list); // 調(diào)用解析方法
} catch (IOException e) {
e.printStackTrace();
}
}
3、新建遠(yuǎn)程FTP服務(wù)器端的文件夾
點(diǎn)擊“新建文件夾”按鈕,會(huì)觸發(fā)com.oyp.ftp.panel.ftp.CreateFolderAction類(lèi)的actionPerformed(ActionEvent e)方法,然后彈出一個(gè)對(duì)話(huà)框,填寫(xiě)要新建的文件夾名稱(chēng),選擇“確定”,“取消”按鈕結(jié)束。其主要代碼如下
/**
* 創(chuàng)建文件夾的事件處理方法
*/
@Override
public void actionPerformed(ActionEvent e) {
// 接收用戶(hù)輸入的新建文件夾的名稱(chēng)
String folderName = JOptionPane.showInputDialog("請(qǐng)輸入文件夾名稱(chēng):");
if (folderName == null)
return;
int read = -1;
try {
// 發(fā)送創(chuàng)建文件夾的命令
ftpPanel.ftpClient.sendServer("MKD " + folderName + "\r\n");
// 讀取FTP服務(wù)器的命令返回碼
read = ftpPanel.ftpClient.readServerResponse();
} catch (IOException e1) {
e1.printStackTrace();
}
if (read == 257) {// 如果返回碼等于257(路徑名建立完成)
// 提示文件夾創(chuàng)建成功
JOptionPane.showMessageDialog(ftpPanel, folderName + "文件夾,創(chuàng)建成功。",
"創(chuàng)建文件夾", JOptionPane.INFORMATION_MESSAGE);
}else{
// 否則 提示用戶(hù)該文件夾無(wú)法創(chuàng)建
JOptionPane.showMessageDialog(ftpPanel, folderName + "文件夾無(wú)法被創(chuàng)建。",
"創(chuàng)建文件夾", JOptionPane.ERROR_MESSAGE);
}
this.ftpPanel.refreshCurrentFolder();
}
4、 刪除遠(yuǎn)程FTP服務(wù)器端的文件
選擇好要?jiǎng)h除的文件或文件夾,點(diǎn)擊“刪除”按鈕,會(huì)觸發(fā)com.oyp.ftp.panel.ftp.DelFileAction類(lèi)的actionPerformed(ActionEvent e)方法,然后彈出一個(gè)對(duì)話(huà)框,選擇“是”,“否”,“取消”按鈕結(jié)束。其主要代碼如下
public void actionPerformed(ActionEvent e) {
// 獲取顯示FTP資源列表的表格組件當(dāng)前選擇的所有行
final int[] selRows = ftpPanel.ftpDiskTable.getSelectedRows();
if (selRows.length < 1)
return;
int confirmDialog = JOptionPane.showConfirmDialog(ftpPanel, "確定要?jiǎng)h除嗎?");
if (confirmDialog == JOptionPane.YES_OPTION) {
Runnable runnable = new Runnable() {
/**
* 刪除服務(wù)器文件的方法
* @param file - 文件名稱(chēng)
*/
private void delFile(FtpFile file) {
FtpClient ftpClient = ftpPanel.ftpClient; // 獲取ftpClient實(shí)例
try {
if (file.isFile()) { // 如果刪除的是文件
ftpClient.sendServer("DELE " + file.getName()
+ "\r\n"); // 發(fā)送刪除文件的命令
ftpClient.readServerResponse(); // 接收返回編碼
} else if (file.isDirectory()) { // 如果刪除的是文件夾
ftpClient.cd(file.getName()); // 進(jìn)入到該文件夾
TelnetInputStream telnetInputStream=ftpClient.list();
byte[]names=new byte[2048];
int bufsize=0;
bufsize=telnetInputStream.read(names, 0, names.length);
int i=0,j=0;
while(i5、重命名遠(yuǎn)程FTP服務(wù)器端的文件
選擇好要重命名的文件或文件夾,點(diǎn)擊“重命名”按鈕,會(huì)觸發(fā)com.oyp.ftp.panel.ftp.RenameAction類(lèi)的actionPerformed(ActionEvent e)方法,其主要代碼如下
/**
* 重命名FTP文件的事件處理方法
*/
@Override
public void actionPerformed(ActionEvent e) {
// 獲取顯示FTP資源的表格當(dāng)前選擇行號(hào)
int selRow = ftpPanel.ftpDiskTable.getSelectedRow();
if (selRow < 0)
return;
// 獲取當(dāng)前行的第一個(gè)表格單元值,并轉(zhuǎn)換成FtpFile類(lèi)型的對(duì)象
FtpFile file = (FtpFile) ftpPanel.ftpDiskTable.getValueAt(selRow, 0);
// 使用對(duì)話(huà)框接收用戶(hù)輸入的新文件或文件夾名稱(chēng)
String newName = JOptionPane.showInputDialog(ftpPanel, "請(qǐng)輸入新名稱(chēng)。");
if (file.getName().equals(".") || file.getName().equals("..")
|| newName == null)
return;
try {
// 向服務(wù)器發(fā)送重命名的指令
ftpPanel.ftpClient.sendServer("RNFR " + file.getName() + "\r\n"); //對(duì)舊路徑重命名
ftpPanel.ftpClient.readServerResponse();
ftpPanel.ftpClient.sendServer("RNTO " + newName + "\r\n"); //對(duì)新路徑重命名
ftpPanel.ftpClient.readServerResponse();
ftpPanel.refreshCurrentFolder(); // 刷新當(dāng)前文件夾
} catch (IOException e1) {
e1.printStackTrace();
}
} 以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。