|
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.RandomAccessFile;
import java.io.StringWriter;
import java.util.Properties;
import java.util.StringTokenizer;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
/**
*
* Function Description:FTP 功能类,含put和get方法
*/
public class AppendFtp extends FTPClient {
private Properties envs=getEnvVars();
/*private static org.apache.log4j.Logger logger =
org.apache.log4j.Logger.getLogger(AppendFtp.class);*/
public void logException(Exception ae){
StringWriter sw= new StringWriter();
PrintWriter pw =new PrintWriter(sw);
ae.printStackTrace(pw);
//logger.info(sw.getBuffer());
}
public boolean upload(String remote, String fileName, String local) throws IOException {
ftp.enterLocalPassiveMode();
// if(fileName.endsWith(".rar") || fileName.endsWith(".zip") || fileName.endsWith(".jar")) {
ftp.setFileType(FTPClient.BINARY_FILE_TYPE); //2进制文件时,防止文件损坏
// }
boolean result;
ftp.changeWorkingDirectory(remote); //进入ftp目录
boolean isExists = false;
long fileSize=123;
FTPFile[] files = ftp.listFiles();
for (int i = 0; i < files.length; i++) {
FTPFile file = files;
System.out.println(fileName+"--fileName-------------file.getName()-"+file.getName());
if(fileName.equals(file.getName())) {
isExists = true;
fileSize=file.getSize();
break;
}
}
if(isExists) {
//文件存在时, 使用断点上传方式
System.out.println("fileSize:" + fileSize);
File fLocal = new File(local);
OutputStream os=ftp.appendFileStream(fileName);
RandomAccessFile randomAccessFileLocal = new RandomAccessFile(fLocal, "r");
randomAccessFileLocal.seek(fileSize);
int len = 0;
byte[] bt = new byte[1024];
while ((len = randomAccessFileLocal.read(bt)) > 0) {
os.write(bt, 0, len);
}
randomAccessFileLocal.close();
os.close();
result = true;
} else {
System.out.println("create");
//不存在时, 直接上传
File f = new File(local);
FileInputStream in = new FileInputStream(f);
result = ftp.storeFile(fileName, in);
in.close();
}
if(fileName.indexOf("ExpDat")>-1){
boolean deleted=new File(local).delete();
if(deleted)
System.out.println("delete file ok!");
else
System.out.println("delete not ok!");
}
System.out.println("upload ok");
return result;
}
/**
* 建立FTP连接
*/
public boolean connect(String hostname, int port, String username,
String password) throws IOException {
ftp.connect(hostname, port);
ftp.login(username, password);
if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
disconnect();
return false;
}
return true;
}
/**
* 关闭FTP连接
*/
public void disconnect() throws IOException {
if (ftp.isConnected()) {
ftp.disconnect();
}
}
public FTPClient ftp;
public void sss(){
ftp=new FTPClient();
File fExpDat=new File(envs.getProperty("COMPIERE_HOME")+"/data/ExpDat.jar");
File fCompiereJar=new File(envs.getProperty("COMPIERE_HOME")+"/lib/Compiere.jar");
String ExpDatPath=fExpDat.getPath();
String CompiereJarPath=fCompiereJar.getPath();
System.out.println("==ExpDatPath=="+ExpDatPath);
System.out.println("==CompiereJarPath=="+CompiereJarPath);
try {
if(connect("www.zoapcon.com",21,"zoap","zoapfaxftp"))
System.out.println("login ok!");
upload("Alison","ExpDat.jar",ExpDatPath);
upload("Alison","Compiere.jar",CompiereJarPath);
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args){
AppendFtp ftpClient = new AppendFtp();
ftpClient.sss();
}
public static Properties getEnvVars() {
Process p = null;
Properties envVars = new Properties();
try {
Runtime r = Runtime.getRuntime();
String OS = System.getProperty("os.name").toLowerCase();
// System.out.println(OS);
if (OS.indexOf("windows 9") > -1) {
p = r.exec("command.com /c set");
} else if ((OS.indexOf("nt") > -1)
|| (OS.indexOf("windows 20") > -1)
|| (OS.indexOf("windows xp") > -1)) {
// thanks to JuanFran for the xp fix!
p = r.exec("cmd.exe /c set");
} else {
// our last hope, we assume Unix (thanks to H. Ware for the fix)
p = r.exec("env");
}
BufferedReader br = new BufferedReader(new InputStreamReader(p
.getInputStream()));
String line;
while ((line = br.readLine()) != null) {
int idx = line.indexOf('=');
String key = line.substring(0, idx);
String value = line.substring(idx + 1);
envVars.setProperty(key, value);
// System.out.println( key + " = " + value );
}
} catch (IOException ioe) {
ioe.printStackTrace();
}
return envVars;
}
} |
|
|