⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mediator.java

📁 基于java设计商业化的的FTP工具的部分代码
💻 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 + -