我用的FTPClient是由Apache组织的commons-net.jar包中的API,这个包用起来非常的方便,很容易上手。我在项目开发的过程中主要用到了文件的上传和下载功能,下面将我开发的代码贴出来供大家学习:
文件上传到文件服务器:在该部分内我遇到的主要问题上文件名乱码,word文档内容乱码,解决办法在代码中已经注释了,希望可以帮助到大家。
/**
* 上传部分代码如下:
* @param url:文件服务器主机地址
* @param port:文件服务器端口号
* @param username:用户名
* @param password:密码
* @param path:文件要保存的路径
* @param filename:文件名字
* @param input:文件输入流,即从本地服务器读取文件的IO输入流
* @return
*/
public static boolean uploadToFTPServer(String url,int port,String username,String password,String path,String filename,InputStream input)
{
boolean success = false; //判断文件是否上传成功
FTPClient ftp = new FTPClient(); //创建一个客户端实例
try {
int reply;
ftp.connect(url, port);//连接FTP服务器
//如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
ftp.login(username, password);//登录
reply = ftp.getReplyCode(); //获得返回的代码,来判断连接状态 if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return success;
}
// ftp.makeDirectory("bbb");//创建文件目录
ftp.changeWorkingDirectory(path);
ftp.setFileType(FTP.BINARY_FILE_TYPE);//设置文件以二进制的形式上传,防止文件内容乱码出现
//设置文件名字的编码格式为iso-8859-1,因为FTP上传的时候默认编码为iso-8859-1,解决文件名字乱码的问题
filename = new String(filename.getBytes("GBK"),"iso-8859-1");
ftp.storeFile(filename, input); //开始上传文件
input.close();//关闭文件输入流
ftp.logout();//断开和ftp服务器之间的连接
success = true;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
}
catch (IOException ioe) {
}
}
}
return success; }
从文件服务器下载文件:
public static void downloadFromFileServer(String url,int port,String username,String password,String path,HttpServletRequest request, HttpServletResponse response) throws SocketException, IOException
{
//boolean success = false; //判断文件是否上传成功
FTPClient ftp = new FTPClient(); //创建一个客户端实例 ftp.connect(url, port);//连接FTP服务器
//如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
ftp.login(username, password);//登录
int reply = ftp.getReplyCode(); //获得返回的代码,来判断连接状态
ftp.changeWorkingDirectory("bbb");//转移到FTP服务器目录
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
}
//File localFile = new File(request.getServletContext().getRealPath("/upload/")+"12345678.doc");
//OutputStream is = new FileOutputStream(localFile);
// ftp.retrieveFile("1234.doc", is); FTPFile[] fs = ftp.listFiles(); for(FTPFile ff:fs){
if(ff.getName().equals("abc.txt")){//如果找到abc.txt则进行下载 ,可以自己设置要下载的文件名称
//设置要下载到的目录
File localFile = new File(request.getServletContext().getRealPath("/upload")+"/12345678.doc");
//得到输出流
OutputStream is = new FileOutputStream(localFile);
ftp.retrieveFile(ff.getName(), is); //开始下载文件
is.close();
}
} ftp.logout();
}
}
以上即为我在使用FTPClient进行文件的上传和下载部分的代码,记录下来以便我日后学习。