FTP 서버 의 목록 을 edtftpj 로 옮 겨 다 니 려 고 시도 합 니 다.

edtFTP j 는 간단 한 FTP 클 라 이언 트 구축 방법 집합 을 제공 합 니 다.현재 필요 한 것 은 FTP 서버 에 있 는 파일 을 옮 겨 다 니 며 파일 정 보 를 얻 는 것 입 니 다.주로 파일 이름과 파일 크기 입 니 다.
일반적인 생각 은 재 귀적 인 방법 으로 옮 겨 다 니 는 것 이다.파일 시스템 은 일반 트 리 와 유사 한 구조 로 유사 성 이 있 기 때문이다.그러나 이러한 잠재 적 인 문 제 는 메모 리 를 너무 많이 차지 하고 모든 함수 가 스 택 을 누 르 며 사용 할 수 없 는 정 보 를 많이 저장 하 는 것 입 니 다.함수 가 얻 을 때마다 폴 더 의 이름(현재 디 렉 터 리 문자열 과 합 쳐 완전한 경 로 를 얻 을 수 있 습 니 다)만 얻 을 수 있 고 다른 정 보 를 얻 을 필요 가 없 기 때문에 stack 과 순환 을 사용 하여 이 재 귀 과정 을 모 의 하기 로 결 정 했 습 니 다.
stack 은 자바 util.stack 과 같은 것 같 지만 초 류 vector 의 명성 이 좋 지 않 은 것 같 습 니 다.(시스템 공간 을 차지 하 는 등 원인 일 수 있 습 니 다)자바 util.stack 은 남 겨 진 클래스 가 되 었 습 니 다.그래서 array 나 linkedlist 로 이 루어 진 stack 류 를 다시 써 야 합 니 다.
다음은 linkedlist 클래스 를 사용 하여 stack 을 실현 합 니 다.(stack 의 코드 를 모방 하여 쓴 것)

package com.hako.ftp;

import java.util.LinkedList;
import java.util.EmptyStackException;

/**
 * 
 * @author XnnYygn
 * 
 * @param <E>
 */
public class ListStack<E> extends LinkedList<E> {
	/**
	 * create empty stack
	 */
	public ListStack() {

	}

	/**
	 * Tests if this stack is empty
	 * 
	 * @return <code>true</code> if and only if this stack contains no items;
	 *         <code>false</code> otherwise.
	 */
	public boolean empty() {
		return size() == 0;
	}

	/**
	 * append item to the stack
	 * 
	 * @param item
	 *            E
	 */
	public void push(E item) {
		add(item);
	}

	/**
	 * return the item from the stack and remove it
	 * 
	 * @return the item
	 */
	public E pop() {
		E obj = null;
		obj = peek();
		removeLast();
		return obj;
	}

	/**
	 * return the item from the stack without removing it
	 * 
	 * @return the item
	 */
	public E peek() {
		if (size() > 0)
			return getLast();
		else
			throw new EmptyStackException();
	}

	/**
	 * search the item in the stack
	 * 
	 * @param o
	 * @return the index of item
	 */
	public int search(Object o) {
		int i = lastIndexOf(o);
		if (i >= 0) {
			return size() - i;
		}
		return -1;
	}

	/** the generated serialVersionUID */
	private static final long serialVersionUID = -1560355629647329776L;

}


이 stack 을 사용 하여 저장 하 는 것 은 주로 스 택 의 작업 디 렉 터 리 입 니 다.기본 적 인 작업 방향 은 다음 과 같 습 니 다.
현재 디 렉 터 리 에 있 는 모든 디 렉 터 리 를 가 져 옵 니 다.현재 디 렉 터 리 에 있 는 파일 은 모두 출력 합 니 다
  • 스 택 이 비어 있 지 않 으 면 현재 디 렉 터 리 를 스 택 디 렉 터 리 로 전환 하고 위의 과정 을 계속 합 니 다
  • 코드 는 다음 과 같 습 니 다.FTP 서버 와 사용자 이름 비밀번호 등 구체 적 인 테스트 정 보 는 표시 되 지 않 았 습 니 다.
    
    package com.hako.ftp;
    
    import java.io.IOException;
    import java.text.ParseException;
    
    import com.enterprisedt.net.ftp.FTPConnectMode;
    import com.enterprisedt.net.ftp.FTPException;
    import com.enterprisedt.net.ftp.FTPFile;
    import com.enterprisedt.net.ftp.FileTransferClient;
    
    public class FtpList {
    	// the ftp
    	private FileTransferClient ftp = null;
    	// the stack of task
    	private ListStack<String> stack = null;
    	// the count of item
    	private Integer count = 0;
    
    	public FtpList() throws FTPException, IOException, ParseException {
    		// prepare
    		ftp = new FileTransferClient();
    		ftp.setRemoteHost("");//host
    		ftp.setUserName("");//username
    		ftp.setPassword("");//password
    		ftp.getAdvancedSettings().setControlEncoding("GBK");
    		ftp.getAdvancedFTPSettings().setConnectMode(FTPConnectMode.PASV);
    
    	}// end of HakoFtpList
    
    	public void connect() throws IOException, FTPException {
    		// connect
    		ftp.connect();
    		System.out
    				.println("Connect successfully!");
    
    	}// end of Connect
    
    	public void disconnect() throws IOException, FTPException {
    		// disconnect
    		if (ftp.isConnected()) {
    			ftp.disconnect();
    			System.out
    					.println("Disconnect successfully");
    		}
    
    	}// end of Disconnect
    
    	public void getAllFileList() throws FTPException, IOException,
    			ParseException {
    		// get file from root
    		getAllFileList("");
    	}// end of getAllFileList
    
    	public void getAllFileList(String rootPath) throws FTPException,
    			IOException, ParseException {
    		// init stack and count
    		stack = new ListStack<String>();
    		count = 0;
    		// get file list under root
    		getFileList(rootPath);
    
    		// with stack
    		while (!stack.isEmpty()) {
    			getFileList(stack.pop());
    		}
    
    	}// end of getAllFileList(rootPath)
    
    	private void getFileList(String path) throws FTPException, IOException,
    			ParseException {
    		// check the path
    		if (path == null) {
    			return;
    		} else if (path == "") {
    			// get directory for ftp
    			ftp.changeDirectory("/");
    		} else {
    			// get directory for test
    			ftp.changeDirectory(path);
    		}
    
    		// get file list
    		FTPFile[] files = ftp.directoryList();
    
    		for (FTPFile file : files) {
    			if (file.isDir()) {
    				// System.out.println(path + "/" + file.getName());
    
    				stack.push(path + "/" + file.getName());
    			} else {
    				System.out.println(path + "/" + file.getName());
    				count++;
    				// System.out.println("Size " + file.size());
    			}
    		}
    	}// end of getFileList
    }
    
    

    FTP 아래 디 렉 터 리 목록 을 옮 겨 다 닐 수 있 습 니 다.
    수정 할 부분:
  • 파일 에 저장 합 니 다
  • 더 많은 스 레 드 가 진 도 를 살 펴 본다기다리다
    실제 호출 코드 는 다음 과 같 습 니 다.
    
    			FtpList ftplist= new FtpList();
    			ftplist.connect();
    			ftplist.getAllFileList();
    			ftplist.disconnect();
    

    잘못 을 포착 하 는 것 을 기억 하 다.

    좋은 웹페이지 즐겨찾기