📄 mediator.java
字号:
package com.yaofahua.jleapftp;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.SocketException;
import java.util.Vector;
import javax.swing.JTextField;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import com.yaofahua.jleapftp.ui.JLeapList;
import com.yaofahua.jleapftp.ui.JLeapTextArea;
import com.yaofahua.jleapftp.ui.MainFrame;
import com.yaofahua.jleapftp.ui.MainMenu;
import com.yaofahua.jleapftp.ui.MainToolBar;
import com.yaofahua.jleapftp.ui.QuickBar;
import com.yaofahua.jleapftp.ui.table.JLeapTable;
import com.yaofahua.jleapftp.ui.table.JLeapTableModel;
public class Mediator {
public MainFrame mainFrame;
JLeapTable remoteTable;
JLeapTableModel remoteModel;
String remoteDir;
String remoteDir_tmp;
JLeapTable localTable;
JLeapTableModel localModel;
String localDir = System.getProperty("user.dir")+"\\";
String localDir_tmp;
//FtpMotion ftp;
QuickBar quickBar;
MainToolBar toolBar;
JLeapTextArea cmdArea;
MainMenu mainMenu;
JLeapList list;
Vector queue = new Vector();
int i = 10;
public FTPClient ftp = new FTPClient();
public Mediator() {
//ftp = new FtpMotion(this);
}
public void addProtocolCommandListener() {
ftp.addProtocolCommandListener(cmdArea);
}
// mediator.toLocalParentDirectory();
//} else {
// mediator.toLocalDirectory(f.getName());
//
//双击文件时,加入下载队列并开始下载
public void doubleClickDownload(String file) {
addFileToQueue(file);
download();
}
public void addFileToQueue(String file) {
//String item = remoteDir+file+" --> "+localDir;
QueueItem item = new QueueItem(localDir+file,remoteDir+file);
queue.add(item);
list.setListData(toLocalQueue());
//list.getModel().
//list.item);
}
public void addDirToQueue(String dir) {
QueueItem item = new QueueItem(localDir+dir+"\\",remoteDir+dir+"/");
queue.add(item);
list.setListData(toLocalQueue());
}
public Vector toLocalQueue() {
Vector queue = new Vector();
//this.list.clear();
for(int i=0;i<this.queue.size();i++) {
QueueItem item = (QueueItem)this.queue.elementAt(i);
queue.add(Utilities.toLocaleString(item.toString()));
}
return queue;
}
//新线程开始下载
public void download() {
//ftp.
Thread t = new Thread() {
public void run() {
localDir_tmp = localDir;
remoteDir_tmp = remoteDir;
while( !queue.isEmpty() ) {
QueueItem item = (QueueItem)queue.elementAt(0);
if( item.isDirectory() ) {
queue.remove(0);
downloadDir(item);
//list.
} else {
downloadFile(item);
queue.remove(0);
}
list.setListData(toLocalQueue());
//listLocalFiles();
}
//回到下载前的本地目录和远程目录
toLocalDirectory(new File(localDir_tmp));
changeWorkingDirectory(remoteDir_tmp,false);
}
};
t.start();
}
//仅仅更改queue,不执行实际的下载操作
public void downloadDir(QueueItem item) {
QueueItem item2;
try {
FTPFile[] files = null;
//
//changeWorkingDirectory(item.getRemoteLastToken(),true);
//changeWorkingDirectory(item.getRemote(),false);
//toLocalDirectory(item.getLocalLastToken());
//files = ftp.listFiles();
files = ftp.listFiles(item.getRemote());
//ftp.list
for(int i=1;i<files.length;i++) {
String name = files[i].getName();
if( files[i].isDirectory() ) {
if( name.equals("..") || name.equals(".") )
continue;
item2 = new QueueItem(item.getLocal()+name+"\\",item.getRemote()+name+"/");
queue.add(0,item2);
} else {
item2 = new QueueItem(item.getLocal()+name,item.getRemote()+name);
queue.add(0,item2);
}
}
//changeToParentDirectory();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//执行实际的下载操作
public void downloadFile(QueueItem item) {
OutputStream output;
try {
File file = new File(Utilities.toLocaleString(item.getLocal()));
if( !file.exists() ) {
file.getParentFile().mkdirs();
//file.createNewFile();
}
toLocalDirectory(file.getParentFile());
output = new FileOutputStream(file);
ftp.retrieveFile(item.getRemote(), output);
output.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
class QueueItem {
String local;
String remote;
public QueueItem(String local,String remote) {
this.local = local;
this.remote = remote;
}
public boolean isDirectory() {
if( remote.endsWith("/") )
return true;
else
return false;
}
public String getLocalLastToken() {
String[] token=local.split("/");
return token[token.length-1];
}
public String getRemoteLastToken() {
String[] token=remote.split("/");
return token[token.length-1];
}
public String getLocal() {
return local;
}
public String getRemote() {
return remote;
}
public String toString() {
return remote+" --> "+local;
}
}
public void toLocalParentDirectory() {
File f = new File(localDir);
if( f.getParent()==null )
return;
if( f.getParent().endsWith("\\") )
localDir = f.getParent();
else
localDir = f.getParent()+"\\";
listLocalFiles();
}
public void toLocalDirectory(String dir) {
localDir += dir+"\\";
listLocalFiles();
}
public void toLocalDirectory(File dir) {
localDir = dir.getAbsolutePath()+"\\";
listLocalFiles();
}
public void changeToParentDirectory() {
try {
if( ftp.changeToParentDirectory() ) {
int i = remoteDir.lastIndexOf("/",remoteDir.length()-2); //
remoteDir = remoteDir.substring(0,i+1);
// remoteTable.dir.insertItemAt(remoteDir,0);
// remoteTable.dir.setSelectedIndex(0);
remoteTable.setDir(Utilities.toLocaleString(remoteDir));
listRemoteFiles();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void changeWorkingDirectory(String dir,boolean bRelative) {
try {
if( ftp.changeWorkingDirectory(dir) ) {
if( bRelative )
remoteDir += dir+"/";
else
remoteDir = dir;
// remoteTable.dir.insertItemAt(remoteDir,0);
// remoteTable.dir.setSelectedIndex(0);
remoteTable.setDir(Utilities.toLocaleString(remoteDir));
listRemoteFiles();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//
public void listLocalFiles() {
// File f = new File(localDir);
// localDir = f.getAbsolutePath();
localTable.setDir(localDir);
File f = new File(localDir);
if( f.canRead() ) {
File[] list = f.listFiles();
localModel.listLocalFiles(list);
}
}
public void connect() {
String addr =
((JTextField)(quickBar.addr.getEditor().getEditorComponent())).getText();
String user = quickBar.user.getText();
String pass = quickBar.pass.getText();
int port = Integer.parseInt(quickBar.port.getText());
try {
cmdArea.appendln("connecting to "+addr+",port="+port);
ftp.connect(addr,port);
ftp.login(user,pass);
cmdArea.appendln("Connected. Waiting for response.");
remoteDir = ftp.printWorkingDirectory();
remoteTable.setDir(remoteDir);
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//FTPListParseEngine engine;
//ftp_.changeWorkingDirectory();
//System.out.println(ftp_.printWorkingDirectory());
//ftp_.changeWorkingDirectory("/java");
// try {
// FTPFile[] files = null;
// files = ftp.listFiles();
// remoteModel.listRemoteFiles(files);
//
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
listRemoteFiles();
//BasicComboBoxEditor
}
public void listRemoteFiles() {
try {
FTPFile[] files = null, files2 = null;
files = ftp.listFiles();
files2 = new FTPFile[files.length-1];
for(int i=1;i<files.length;i++) {
files2[i-1] = files[i]; //跳过"."目录
}
//remoteModel.listRemoteFiles(files);
remoteModel.listRemoteFiles(files2);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void register(MainMenu me) {
this.mainMenu = me;
}
public void register(JLeapTextArea ta) {
this.cmdArea = ta;
}
public void register(JLeapList list) {
this.list = list;
}
public void register(MainToolBar bar) {
this.toolBar = bar;
}
public void register(QuickBar bar) {
this.quickBar = bar;
}
public void register(MainFrame mf) {
this.mainFrame = mf;
}
public void register(JLeapTable lt,int mode) {
if( mode == JLeapTable.LOCAL ) {
this.localTable = lt;
} else {
this.remoteTable = lt;
}
}
public void register(JLeapTableModel ltm,int mode) {
if( mode == JLeapTable.LOCAL ) {
this.localModel = ltm;
} else {
this.remoteModel = ltm;
}
}
// public void register(FtpMotion ftp) {
// this.ftp = ftp;
// }
// public void test() {
// ftp.test();
// }
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -