FTP 서버 의 목록 을 edtftpj 로 옮 겨 다 니 려 고 시도 합 니 다.
일반적인 생각 은 재 귀적 인 방법 으로 옮 겨 다 니 는 것 이다.파일 시스템 은 일반 트 리 와 유사 한 구조 로 유사 성 이 있 기 때문이다.그러나 이러한 잠재 적 인 문 제 는 메모 리 를 너무 많이 차지 하고 모든 함수 가 스 택 을 누 르 며 사용 할 수 없 는 정 보 를 많이 저장 하 는 것 입 니 다.함수 가 얻 을 때마다 폴 더 의 이름(현재 디 렉 터 리 문자열 과 합 쳐 완전한 경 로 를 얻 을 수 있 습 니 다)만 얻 을 수 있 고 다른 정 보 를 얻 을 필요 가 없 기 때문에 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 을 사용 하여 저장 하 는 것 은 주로 스 택 의 작업 디 렉 터 리 입 니 다.기본 적 인 작업 방향 은 다음 과 같 습 니 다.
현재 디 렉 터 리 에 있 는 모든 디 렉 터 리 를 가 져 옵 니 다.현재 디 렉 터 리 에 있 는 파일 은 모두 출력 합 니 다
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();
잘못 을 포착 하 는 것 을 기억 하 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JAVA 다 중 스 레 드 메커니즘 의 스 레 드 생 성target 을 실행 대상 으로 지정 한 name 을 이름 으로 하고 group 에서 참조 하 는 스 레 드 그룹의 일원 으로 새 Thread 대상 을 할당 합 니 다. 이 스 레 드 가 독립 된 Runnable 실...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.