import java.io.File;
import java.io.IOException;
import java.util.Arrays;import com.enterprisedt.net.ftp.FTPException;
import com.enterprisedt.net.ftp.FileTransferClient;
import com.enterprisedt.util.debug.FileAppender;
import com.enterprisedt.util.debug.Level;
import com.enterprisedt.util.debug.Logger;public class FTPTest {
static{
try {
Logger.addAppender(new FileAppender("D:\\log.txt"));
Logger.setLevel(Level.INFO);
} catch (IOException e) {
e.printStackTrace();
}
}

private static Logger log = Logger.getLogger(FTPTest.class);
private static String defaultDirectory = ""; //ftp默认的目录!
private FileTransferClient ftp = null; //FTP client

public FTPTest(String host, String username, String password){
//Creating FTP client
ftp = new FileTransferClient();

//Setting remote host
try {
ftp.setRemoteHost(host);
ftp.setUserName(username);
ftp.setPassword(password);

// connect to the server
log.info("Connecting to server " + host);

ftp.connect();
if(ftp.isConnected()){
defaultDirectory = ftp.getRemoteDirectory();
log.info("Connected and logged in to server " + host);
}else{
log.info("this client currently has not connected to the server!");
}
} catch (FTPException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

public FTPTest(){
this("192.168.1.1", "ftp", "111111");
}
    
private void createDirectory(String path){
String[] paths = path.split("/");
String[] curFileList = null;
boolean exist = false;

try {
for(String p : paths){
curFileList = ftp.directoryNameList(); //
for(String fileName : curFileList){
if(fileName.equals(p)){
ftp.changeDirectory(p);
exist = true;
break;
}
}
if(exist){
exist = false;
}else{
ftp.createDirectory(p);
ftp.changeDirectory(p);
}
}
} catch (FTPException e) {
log.info("create directory ["+path+"] is faild!");
e.printStackTrace();
} catch (IOException e) {
log.info("create directory ["+path+"] is faild!");
e.printStackTrace();
}
}

public void closeFTP(){
try {
if(ftp.isConnected()){
ftp.disconnect();
}
} catch (FTPException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

public void uploadFiles(String directory, String extName){
File temp = null;
File file = new File(directory);
String[] files = file.list();

try {
log.info("begin upload the folder:"+directory);
if(ftp.isConnected()){
for(String f : files){
temp = new File(file.getAbsolutePath()+File.separator+f);
if(temp.isDirectory()){
uploadFiles(temp.getAbsolutePath(), extName);
}else if(temp.isFile()){
if(extName.indexOf(temp.getName().substring(temp.getName().lastIndexOf(".")+1))>-1){
changeDirectory(ftp.getRemoteDirectory(), temp.getParent().substring(3));
if(!ftp.exists(temp.getName())){
ftp.uploadFile(temp.getParent()+File.separator+temp.getName(), temp.getName());
}
}
}
}
}else{
log.info("this client currently has not connected to the server!");
}
log.info("end upload the folder:"+directory);
} catch (IOException e) {
e.printStackTrace();
} catch (FTPException e) {
e.printStackTrace();
}

}

private void changeDirectory(String curDi, String chDi){
chDi = chDi.replaceAll("\\\\", "/");
if(defaultDirectory.equals(curDi)){
createDirectory(chDi);
}else{
if(curDi.indexOf(chDi) == -1){ //判断文件是否在同一文件夹中。-1:不在,否则在!
String[] cruDis = curDi.split("/");
cruDis = Arrays.copyOfRange(cruDis, cruDis.length-3, cruDis.length);
String[] chDis = chDi.split("/");
chDis = Arrays.copyOfRange(chDis, chDis.length-3, chDis.length);

try {
if(cruDis[0].equals(chDis[0])){ //B001
if(cruDis[1].equals(chDis[1])){ //课本ID!
ftp.changeDirectory("..");
createDirectory(chDis[2]);
}else{
ftp.changeDirectory("../..");
createDirectory(chDis[1]+"/"+chDis[2]);
}
}else{
ftp.changeDirectory("../../..");
createDirectory(chDis[0]+"/"+chDis[1]+"/"+chDis[2]);
}
} catch (FTPException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

public static void main(String[] args) {
FTPTest ftp = new FTPTest();
ftp.uploadFiles("D:/files/Product/B001", "mp3,amr");
ftp.closeFTP();
}}