Windows下Ftp搭建和Java中的使用个人总结
最近项目中使用到了FTP服务器,于是就进行学习了一下。项目真实的FTP环境是在客户方的,所以为了在项目开发中方便,就根据网上的资料搭建了一个FTP服务器,然后用java实现了一下对ftp的操作。
当然网上已经有了很多这方面的资料,主要是为了稳固刚学到的知识,所以将自己搭建的过程和代码的编写进行记录下来。
ftp环境搭建
首先,选择一个ftp服务器软件,我选择FileZilla Server这个软件还不错,百度上能够直接搜到,免费的。
软件的安装过程如果没有太大的需求,基本上下一步下一步就行,一直到安装完毕。这个就不列了。
安装好的界面应该是这样的,当然我这个已经运行了。
接下来就是添加用户,这个用户用来进行登录使用,之后再Java代码中也会用到。
点击edit->users->general->add 填写用户名,然后点击enable account 设置密码,除用户名外,与下图保持一致即可,点击ok。
添加完用户后需要添加一个ftp共享目录,以后账号登录进去后上传和下载的空间,其实就是创建一个文件夹。点击add,权限区域需要设置下,因为这将决定你创建的共享目录,别人是否能够进行读写,因为是在本地进行测试的所以我全都差不多都勾了。
好了,基本上的配置完毕,至于还有一些对上传下载的速度限制,以及响应时间、日志等设置,如有特殊需要可以自己设置,这里就不多说了。
限制ftp环境搭建完毕,我们可以通过多种方式进行访问.
dos访问,进行检验
可以进入,并且能够进行操作。
当然也可以在win+R中进行输入ftp://127.0.0.1 (当然不建议使用这个ip 建议使用真实Ip)
其次是在文件夹上输入ftp://127.0.0.1进行访问,如图
Java对ftp的操作
创建一个项目,因为是写的一个测试项目,所以一个普通的java project就行。我的目录如下:
本次ftp操作使用了commons-net的FTPClient类实现,commons-net是apache的一个开源项目,网上可以直接下载;
创建properties文件
ftp.url=127.0.0.1 ftp.port=21 ftp.userName=zdp ftp.password=123456 ftp.path=test2 ftp.downpath=test2
ftp的上传操作
public static boolean upload(String fileName,InputStream input){//fileName是要上传的文件名称,input是读取要上传的文件的流 boolean issuccess=false; FTPClient ftp =new FTPClient(); Properties pt=FtpUtils.getProperties(); try { int reply; ftp.connect(pt.getProperty("ftp.url"));//创建连接,如果端口号是默认的21 则可以只有一个参数 ftp.login(pt.getProperty("ftp.userName"), pt.getProperty("ftp.password")); reply=ftp.getReplyCode(); if(!FTPReply.isPositiveCompletion(reply)){ ftp.disconnect(); return issuccess; } ftp.makeDirectory(pt.getProperty("ftp.path"));//如果不存在创建存放目录 ftp.changeWorkingDirectory(pt.getProperty("ftp.path")); 将位置转移到存放目录 ftp.storeFile(fileName, input); 数据存放 input.close(); ftp.logout(); issuccess = true; } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { if (ftp.isConnected()) { try { ftp.disconnect(); } catch (IOException ioe) { } } } return issuccess; }
获取InputStream 代码
public InputStream getInputSteam(String files) { InputStream in = null; try { in = new FileInputStream(new File(files)); } catch (FileNotFoundException e) { e.printStackTrace(); } return in; }
Main函数调用启动测试
public static void main(String[] args) { FtpUtils ftp=new FtpUtils(); String filename="D://aaa.txt"; boolean issuccess = false; issuccess=ftp.upload(new File(filename.trim()).getName(),ftp.getInputSteam(filename)); }
ftp下载操作
创建Java文件,FtpDown.java。具体代码如下:
/** * * @param ftp 传入ftp对象,这样可以维护一个对象来进行操作上传下载,或者多次下载 * 避免每次进行操作都创建ftp对象 * @param fileName 下载的文件名 * @param localPath 下载位置 * @param ftppath ftp上的路径 * @return * @throws IOException */ public static boolean downFile(FTPClient ftp,String fileName,String localPath,String ftppath) throws IOException{ boolean issuccess=false; int reply; reply=ftp.getReplyCode(); if(!FTPReply.isPositiveCompletion(reply)){ ftp.disconnect(); return issuccess; } ftp.changeWorkingDirectory(ftppath); FTPFile[] fs = ftp.listFiles(); for(FTPFile ff:fs){ if(ff.getName().equals(fileName)){ File localFile = new File(localPath+"/"+ff.getName()); OutputStream is = new FileOutputStream(localFile); ftp.retrieveFile(ff.getName(), is); is.close(); } } issuccess = true; return issuccess; }
ftp删除操作
创建Java文件,FtpDelete.java。具体代码如下:
可以直接调用该方法,然后传入路径名进行删除
ftp.deleteFile(pathname)

浙公网安备 33010602011771号