Ftp相关的类库很多,这里以JDK自带的FTP上传下载功能为例。
package com.boonya.upload.util.simple;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.InetSocketAddress;
import sun.net.TelnetInputStream;
import sun.net.TelnetOutputStream;
import sun.net.ftp.FtpClient;
import sun.net.ftp.FtpProtocolException;
/**
* Java自带的API对FTP的操作
* @Jdk:version 1.7
* @Title:Ftp.java
* @author: boonya
* @notice: 貌似此方法有个缺陷,不能操作大文件
*/
public class FtpJdk
{
/**
*
* 本地文件名
*/
private String localfilename;
/**
*
* 远程文件名
*/
private String remotefilename;
/**
*
* FTP客户端
*/
private FtpClient ftpClient;
/**
* 服务器连接
*
* @param ip
* 服务器IP
* @param port
* 服务器端口
* @param user
* 用户名
* @param password
* 密码
* @param path
* 服务器路径
* @throws FtpProtocolException
*
*/
public void connectServer(String ip, int port, String user, String password, String path) throws FtpProtocolException
{
try
{
/* ******连接服务器的两种方法****** */
// 第一种方法
/*
* ftpClient =FtpClient.create();
* ftpClient.connect(new InetSocketAddress(ip, port));
*/
// 第二种方法
ftpClient = FtpClient.create(ip);
ftpClient.login(user, null, password);
// 设置成2进制传输
ftpClient.setBinaryType();
System.out.println("login success!");
if (path.length() != 0)
{
// 把远程系统上的目录切换到参数path所指定的目录
ftpClient.changeDirectory(path);
}
ftpClient.setBinaryType();
} catch (IOException ex)
{
ex.printStackTrace();
throw new RuntimeException(ex);
}
}
/**
* 关闭连接
*
*/
public void closeConnect()
{
try
{
ftpClient.close();
System.out.println("disconnect success");
} catch (IOException ex)
{
System.out.println("not disconnect");
ex.printStackTrace();
throw new RuntimeException(ex);
}
}
/**
*
* 上传文件
*
* @param localFile
* 本地文件
* @param remoteFile
* 远程文件
* @throws FtpProtocolException
*/
public void upload(String localFile, String remoteFile) throws FtpProtocolException
{
this.localfilename = localFile;
this.remotefilename = remoteFile;
TelnetOutputStream os = null;
FileInputStream is = null;
try
{
// 将远程文件加入输出流中
os = (TelnetOutputStream) ftpClient.putFileStream(this.remotefilename, true);
// 获取本地文件的输入流
File file_in = new File(this.localfilename);
is = new FileInputStream(file_in);
// 创建一个缓冲区
byte[] bytes = new byte[1024];
int c;
while ((c = is.read(bytes)) != -1)
{
os.write(bytes, 0, c);
}
System.out.println("upload success");
} catch (IOException ex)
{
System.out.println("not upload");
ex.printStackTrace();
throw new RuntimeException(ex);
} finally
{
try
{
if (is != null)
{
is.close();
}
} catch (IOException e)
{
e.printStackTrace();
} finally
{
try
{
if (os != null)
{
os.close();
}
} catch (IOException e)
{
e.printStackTrace();
}
}
}
}
/**
*
* 下载文件
*
* @param remoteFile
* 远程文件路径(服务器端)
* @param localFile
* 本地文件路径(客户端)
* @throws FtpProtocolException
*
*/
public void download(String remoteFile, String localFile) throws FtpProtocolException
{
TelnetInputStream is = null;
FileOutputStream os = null;
try
{
// 获取远程机器上的文件filename,借助TelnetInputStream把该文件传送到本地。
is = (TelnetInputStream) ftpClient.getFileStream(remoteFile);
File file_in = new File(localFile);
os = new FileOutputStream(file_in);
byte[] bytes = new byte[1024];
int c;
while ((c = is.read(bytes)) != -1)
{
os.write(bytes, 0, c);
}
System.out.println("download success");
} catch (IOException ex)
{
System.out.println("not download");
ex.printStackTrace();
throw new RuntimeException(ex);
} finally
{
try
{
if (is != null)
{
is.close();
}
} catch (IOException e)
{
e.printStackTrace();
} finally
{
try
{
if (os != null)
{
os.close();
}
} catch (IOException e)
{
e.printStackTrace();
}
}
}
}
/**
* 函数入口
*
* @param agrs
*/
public static void main(String agrs[])
{
String filepath[] =
{ "/temp/aa.txt", "/temp/regist.log" };
String localfilepath[] =
{ "C:\\tmp\\1.txt", "C:\\tmp\\2.log" };
FtpJdk ftp = new FtpJdk();
/*
* 使用默认的端口号、用户名、密码以及根目录连接FTP服务器
*/
try
{
ftp.connectServer("127.0.0.1", 22, "boonya", "user@", "/temp");
} catch (FtpProtocolException e)
{
e.printStackTrace();
}
// 下载
for (int i = 0; i < filepath.length; i++)
{
try
{
ftp.download(filepath[i], localfilepath[i]);
} catch (FtpProtocolException e)
{
e.printStackTrace();
}
}
String localfile = "E:\\contact.txt";
String remotefile = "/temp/records.txt";
// 上传
try
{
ftp.upload(localfile, remotefile);
} catch (FtpProtocolException e)
{
e.printStackTrace();
}
ftp.closeConnect();
}
}
参考自:http://www.open-open.com/lib/view/open1342167969281.html
分享到:
相关推荐
jdk1.7_linux Linux版零积分jdk1.7_linux Linux版零积分免费下载jdk1.7_linux Linux版零积分免费下载jdk1.7_linux Linux版零积分免费下载jdk1.7_linux Linux版零积分免费下载jdk1.7_linux Linux版零积分免费下载jdk...
jdk1.7版本免安装
jdk1.7 64位下载
64位linux jdk1.7,jdk-7u79-linux-x64.tar.gz版本,从sun的官网上下载的
jdk 1.7 64位jdk 1.7 64位jdk 1.7 64位jdk 1.7 64位jdk 1.7 64位jdk 1.7 6
java jdk 1.7官网免安装版本,解压就可以直接使用,不用再官网登录账号就可以直接下载,省去很多麻烦,不用各种等待,直接使用csdn平台就可以直接下载。
linux 64位 jdk1.7,使用tar -xvf可以解压文件,配置环境变量即可
jdk1.7 windows 32: Windows 32位下的JDK1.7 请注意不要下错了 无需安装,解压即可 注意设置环境变量 本资源分为两部分,都在我空间里(csdn不允许文件超过60M)
jdk1.7jdk1.7
jdk1.7 jdk1.8 linux 64位下载,jdk1.7 jdk1.8 linux 64位下载
Java SE Development Kit(jdk下载)是 Java 语言软件开发工具包,这里提供jdk1.7。jdk1.7是整个Java的核心所在,其中包括了Java运行环境。
java jdk1.7.zip 64位,喜欢就拿去吧!!!!!!!!!
JDK1.7新特性介绍 1. 对Java集合(Collections)的增强支持 2. 在Switch中可用String 在JDK7 的正式版本中,你可以在switch的表达式中用String类型 3. 数值可加下划线 下划线字符(_)能够出现在数字字面量的数字...
jdk1.7_64免安装版本百度云下载
java jdk1.7源码包,用于centos7使用jdk1.7编译openjdk1.8的 1.7版本
jdk1.7-linux..
java运行环境 jdk1.7u80 jar 64bit 64位jdk下载,上传限制文件分3部分上传,第三部分
jdk1.7 64位 官方正式版下载 最好用 最稳定的版本 不用费心的找了 就是它了