1. 怎么获取ftp的路径
问一下,你是想做ftp上传下载么?首先你需要安装一个ftp服务端程序,启动起来,然后下载一个ftp客户端程序,测试能不能连接,首先这一块儿需要测试通过。
代码ftp上传下载 2.1 上传代码: import java.io.File; import java.io.FileInputStream; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPReply; public class test { private FTPClient ftp; /** * * @param path 上传到ftp服务器哪个路径下 * @param addr 地址 * @param port 端口号 * @param username 用户名 * @param password 密码 * @return * @throws Exception */ private boolean connect(String path,String addr,int port,String username,String password) throws Exception { boolean result = false; ftp = new FTPClient(); int reply; ftp.connect(addr,port); ftp.login(username,password); ftp.setFileType(FTPClient.BINARY_FILE_TYPE); reply = ftp.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { ftp.disconnect(); return result; } ftp.changeWorkingDirectory(path); result = true; return result; } /** * * @param file 上传的文件或文件夹 * @throws Exception */ private void upload(File file) throws Exception{ if(file.isDirectory()){ ftp.makeDirectory(file.getName()); ftp.changeWorkingDirectory(file.getName()); String[] files = file.list(); for (int i = 0; i < files.length; i++) { File file1 = new File(file.getPath()+"\\"+files[i] ); if(file1.isDirectory()){ upload(file1); ftp.changeToParentDirectory(); }else{ File file2 = new File(file.getPath()+"\\"+files[i]); FileInputStream input = new FileInputStream(file2); ftp.storeFile(file2.getName(), input); input.close(); } } }else{ File file2 = new File(file.getPath()); FileInputStream input = new FileInputStream(file2); ftp.storeFile(file2.getName(), input); input.close(); } } public static void main(String[] args) throws Exception{ test t = new test(); t.connect("", "localhost", 21, "yhh", "yhhazr"); File file = new File("e:\\uploadify"); t.upload(file); } } 2.2 下载代码 这里没有用到filter,如果用filter就可以过滤想要的文件。 public class Ftp { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Ftp ftp = new Ftp(); String hostname = ""; Integer port = 21; String username = "username"; String password = "password"; String remote = "/c.txt"; String local = "/home/tin/LeonChen/FTP/"; try { ftp.connect(hostname, port, username, password); System.out.println("接收状态:"+ftp.download(remote, local)); ftp.disconnect(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private FTPClient ftpClient = new FTPClient(); /* * * 连接到FTP服务器 * * @param hostname 主机名 * * @param port 端口 * * @param username 用户名 * * @param password 密码 * * @return 是否连接成功 * * @throws IOException */ private boolean connect(String hostname, int port, String username, String password) throws IOException { ftpClient.connect(hostname, port); ftpClient.setControlEncoding("UTF-8"); if (FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) { if (ftpClient.login(username, password)) { return true; } } disconnect(); return false; } /* * 从FTP服务器上下载文件,支持断点续传,上传百分比汇报 * * @param remote 远程文件路径 * * @param local 本地文件路径 * * @return 上传的状态 * * @throws IOException */ public DownloadStatus download(String remote, String local) throws IOException { // 设置被动模式 ftpClient.enterLocalPassiveMode(); // 设置以二进制方式传输 ftpClient.setFileType(FTP.BINARY_FILE_TYPE); DownloadStatus result; // 检查远程文件是否存在 FTPFile[] files = ftpClient.listFiles(new String(remote .getBytes("UTF-8"), "iso-8859-1")); if (files.length != 1) { System.out.println("远程文件不存在"); return DownloadStatus.Remote_File_Noexist; } long lRemoteSize = files[0].getSize(); String fildName = files[0].getName(); // 本地存在文件,进行断点下载 File f = new File(local+fildName); if (f.exists()) { long localSize = f.length(); if (localSize >= lRemoteSize) { System.out.println("本地文件大于远程文件,下载中止"); return DownloadStatus.Local_Bigger_Remote; } // 进行断点续传,并记录状态 FileOutputStream out = new FileOutputStream(f, true); ftpClient.setRestartOffset(localSize); InputStream in = ftpClient.retrieveFileStream(new String(remote.getBytes("UTF-8"), "iso-8859-1")); byte[] bytes = new byte[1024]; long step = lRemoteSize / 100; long process = localSize / step; int c; while ((c = in.read(bytes)) != -1) { out.write(bytes, 0, c); localSize += c; long nowProcess = localSize / step; if (nowProcess > process) { process = nowProcess; if (process % 10 == 0) System.out.println("下载进度:" + process); // TODO 更新文件下载进。
2. 怎么从FTP上下载路径有空格的文件夹
1、不是在你的FTP上吗?直接上你的FTP改个名不就行了。
2、下载路径中的 %20 不要去掉,那个代表空格。
如果还有不明白的。可给我留言。
再转一个:
看到很多新人在那里抱怨不会下载这类地址,现在就教教你们
示范地址(乱写的):
ftp://218.91.202.10/*****/aa1*/*by aa1/44.mpg*
这种地址其实是没有加密的pub地址。对于在局域网中不能使用socks4,sock5,pub\Ftproot”,你如果临时想改变共享目录,随时都可在此处修改(如图20),以后别人登录你的FTP服务器时显示的文件列表就是在这个目录中。 第三步:在“主目录”的标签处,你还可设置FTP服务器的文件访问权限,分别有读取、写入和日志访问,安全起见,这里的写入权限一般不选,保证匿名用户不能随意对你文件进行操作。
第四步:设置登录的用户。如果你愿意提供“匿名”的访问权限,还需在“安全标签”处选择上“允许匿名连接”(如图21)。
此外,你还可从Windows系统帐号中选择FTP服务器的特殊帐号,当然也可以自己任意设置用户名和密码。 第五步:在“消息”标签处,有“欢迎”、“退出”和“最大连接数”3个输入框,分别代表别人在登录、退出时FTP服务器上给出的提示信息,你可根据自己的需要设置。
此外,最大连接数是设置同时连接本地FTP的最大主机台数(如图22)。 第六步:在“FTP站点”的标签处设置FTP标识,包括说明、IP地址和端口,这里一般不需要改动,按照默认选择即可(如图23)。
此外,在“C:\Winnt\System32\Logfiles”目录中你还可以看到连接上你FTP的IP、时间等日志信息。 此时,利用IE或者任何一款FTP的客户端软件即可登录你架设好的FTP站点。
2.利用Serv-U 在FTP服务器的搭建中,Serv-U是目前使用比较多的工具之一。它设置简单,功能强大,而且非常稳定,总体上来说上它比IIS附带的FTP服务器略胜一筹。
它适用于所有的Windows版本,是一款共享软件,可以让用户免费使用一个月。 第一步:Serv-U的下载和安装。
目前Serv-U的最高版本为4.0,文件大小为2.9MB,它的下载站点之一为“”。 点击下载的可执行文件即可开始安装了,安装过程很简单,所有设置保持默认值就可以,按“Next”完成每一步(如图24)。
安装完毕,在Windows的桌面上就出现Serv-U的图标,双击Serv-U图标,出现Serv-U主窗口,点击主界面右边窗口的“Start server”即可启动FTP服务器 。 第二步:Serv-U的配置。
在Serv-U的安装完成之后即可出现配置向导,可以通过这个向导来对它进行配置,主要步骤如下。 A.安装程序首先启动一个设置向导帮助你设置FTP服务器,点击“Next”继续。
B.系统弹出输入IP的对话框,此项需要填入你准备为此FTP服务器绑定的IP地址。除非你的计算机有多个固定的IP地址,并且你只想其中一个被FTP服务器所使用,否则,建议不管你是否有固定的IP地址,都将此项保留为空(即让系统自动侦测),点击“Next”(如图25)。
C.输入Domain name(域名)。此处填入你FTP服务器的域名。
但域名由DNS解析而不是由这里决定,因此实际上你可以填入任意内容,比如像“我的个人FTP服务器”这种对此FTP进行说明的文字。 D.输入FTP访问的端口号,一般保持默认的21即可。
E.匿名用户的创建和访问目录的设定。首先向导会提示你是否要创建匿名帐号,这里选择是,如果选择不,则用户需要用户名和密码才能访问FTP服务器。
接下来安装向导提示输入匿名用户的主目录(Anonymous home directory),此处按照需要来设定匿名用户访问硬盘的位置。 F.选择匿名用户是否将其限制在主目录里,如果选择是,则用户只能访问其主目录及以下的目录树;如果选择否,则可以访问其主目录的同级或更高级的目录树。
从安全角度考虑,一般建议选是。 G.创建新用户和访问目录。
按照向导的提示一步一步创建新用户并输入密码(如图26),接着指定该用户可访问的目录和用户权限即可。 到这里,你的个人FTP就已经搭建完成了。
不过这还只能实现Serv-U赋予的默认功能和权限,要真正让这个服务器能被你自己随心所欲地控制和管理,则还需要经过以下后续的操作,这主要包括如下几点。 A.对FTP用户的管理 欲增加一个新用户(包括增加Anonymous用户),则在Serv-U的一个域中选中Users(用户),然后单击右键,进入New User(新用户),依次根据提示为它设置好User Name(用户名)、Password(密码)、Home directory(主目录)等即可完成(如图27)。
欲删除一个。