实际项目需求:从数据库查找信息,在本地生成文件,再上传到ftp
所用Jar包:NetComponents.jar
核心代码:
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import com.oroinc.net.ftp.FTP;
import com.oroinc.net.ftp.FTPClient;
import com.oroinc.net.ftp.FTPReply;
public class FtpUtil {
public void connect(String ip, String port, String username,String password,String path,String filePath,String dateString){
FTPClient ftp = new FTPClient();
try{
int reply;
ftp.connect(ip);
System.out.println("Connected to " + ip + ".");
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply))
{
ftp.disconnect();
throw new RuntimeException("FTP server refused connection.");
}
if (!ftp.login(username, password))
{
ftp.logout();
throw new RuntimeException("FTP login error.");
}
System.out.println("ftp系统名称 " + ftp.getSystemName());
ftp.setFileType(FTP.BINARY_FILE_TYPE);
ftp.enterLocalPassiveMode();//主动模式,端口自动获取的
//在ftp服务器上建立文件夹,要有权限
boolean a= ftp.makeDirectory(path+"/"+dateString);//dateString 我们要求是以时间生成文件夹
//转换工作空间,准备上传
boolean b = ftp.changeWorkingDirectory(path+"/"+dateString);
// ftpClient.enterLocalPassiveMode(); //被动模式
System.out.println("ftp就绪");
//获得所有文件的名字
File file=new File(filePath);
String[] files=file.list();
//遍历上传
for (int i = 0; i < files.length; i++) {
File f = new File(filePath+"/"+files[i]);
InputStream input = new FileInputStream(f);
System.out.println("准备传送"+files[i]);
//ftp.storeFile(path,input);
//第一个参数是将要上传到ftp服务器上的绝对路径加文件名,第二个参数是上传的文件流,也要是本地的绝对路径
boolean flag = ftp.storeFile(path+"/"+dateString+"/"+files[i], input);
System.out.println("flag============================="+flag);
if(flag){
System.out.println("传送完毕");
}else{
input.close();
throw new RuntimeException("传送文件失败,请检查ftp连接");
}
input.close();
}
System.out.println("上传完成");
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("ftp__发送数据给融合异常,请联系系统管理员");
}finally{
if (ftp.isConnected())
{
try
{
ftp.logout();
ftp.disconnect();
}
catch (IOException f)
{
f.printStackTrace();
throw new RuntimeException("关闭FTP连接发生异常!", f);
}
}
}
}
}