package com.teenysoft.usermanager;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import sun.net.TelnetOutputStream;
import sun.net.ftp.FtpClient;
/**
* Class FtpFileUpload.java
* Function 使用ftp上传文件、目录
*/
public class FtpFileUpload {
private FtpClient ftpClient=null;
public FtpFileUpload(){
ftpClient=new FtpClient();
ftpClient.setConnectTimeout(5000);
}
public void connect(String host,int port,String user,String password)throws IOException{
ftpClient.openServer(host,port);
ftpClient.login(user,password);
ftpClient.binary();
}
public void cd(String relativePath)throws IOException{
ftpClient.cd(relativePath);
}
public void uploadDirectory(String directory,boolean bl,String nameFtp,String n,String serverIp,String username,String password)throws IOException{
File file=new File(directory);
String name=null;//待上传文件名
if(file.isDirectory()){//如果为目录,则按目录传
File[] files=file.listFiles();
//在ftp服务器上创建对应目录
ftpClient.ascii();
String dir = file.getName();
if(bl){
dir = nameFtp;
bl = false;
}
ftpClient.sendServer("XMKD " + dir + "\r\n");
ftpClient.readServerResponse();
ftpClient.cd(dir);
ftpClient.binary();
//循环传递目录下的所有文件与目录
int i=0;
for(i=0;i<files.length;i++){
File tmpFile=files[i];
if(tmpFile.isDirectory()){
ftpClient.cd("..");
ftpClient.cd(dir);
uploadDirectory(tmpFile.getAbsolutePath(),bl,nameFtp, n, serverIp, username, password);
}else{
ftpClient.cd("..");
ftpClient.cd(dir);
name=tmpFile.getName();
upload(directory+"/"+name, n, serverIp, username, password);
}
}
ftpClient.cd("..");
}
else //如果为文件,则按文件上传
upload(directory,file.getName(), n, serverIp, username, password);
}
public void upload(String srcFile,String n,String serverIp,String username,String password)throws IOException{
File file=new File(srcFile);
FileInputStream fin=new FileInputStream(srcFile);
TelnetOutputStream tos = ftpClient.put(file.getName());
if(file.getName().equals("spring.xml")){
InputStreamReader ie=new InputStreamReader(fin, "utf-8");
BufferedReader reader = new BufferedReader(ie);
String line = null;
while ((line = reader.readLine()) != null) {
if(line.indexOf("serverIp")!=-1){
line=line.replaceAll("serverIp", serverIp);
line=line.replaceAll("dataName", n);
}
if(line.indexOf("datausername")!=-1){
line=line.replaceAll("datausername", username);
}
if(line.indexOf("datapassword")!=-1){
line=line.replaceAll("datapassword", password);
}
tos.write(line.getBytes("utf-8"));
System.out.println("----------------1--------");
}
System.out.println("----------------2--------");
reader.close();
ie.close();
}else{
int readLength = 0;
byte[] buf = new byte[1024];
while ( (readLength = fin.read(buf)) != -1) {
tos.write(buf, 0, readLength);
}
}
fin.close();
tos.close();
}
public void upload(String srcFile,String destFile,String n,String serverIp,String username,String password)throws IOException{
upload(srcFile, n, serverIp, username, password);
File file=new File(srcFile);
ftpClient.rename(file.getName(), destFile);
}
public void close(){
try {
ftpClient.closeServer();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
FtpFileUpload ftpUpload=new FtpFileUpload();
try {
ftpUpload.connect("192.168.0.253",21,"wgr","123");
ftpUpload.uploadDirectory("E:/ztTest/appTest/t8",true,"wgr","wgr","192.168.0.253","sa","");
System.out.println("ok");
ftpUpload.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}