使用Java URL连接设置FTP主动/被动模式

使用Java URL连接设置FTP主动/被动模式,java,ftp,Java,Ftp,使用URLConnection类时,是否可以设置FTP被动或主动模式?我找不到任何关于这方面的文档,但这是一个非常基本的功能,很难相信它没有实现 如果不是,我在标准Java中还有什么其他选择呢?要让FTP充分发挥作用,您真的需要回到低级别编程。URLConnection和配偶根本不适合您的需要(不支持进入被动模式)。幸运的是,ApacheCommons已经在flavor中为您做了大量工作。为了实现您所需要的功能,今天只需使用or,我们捕获TCP/IP数据包并确认Android/JAVA/URLC

使用URLConnection类时,是否可以设置FTP被动或主动模式?我找不到任何关于这方面的文档,但这是一个非常基本的功能,很难相信它没有实现


如果不是,我在标准Java中还有什么其他选择呢?

要让FTP充分发挥作用,您真的需要回到低级别编程。
URLConnection
和配偶根本不适合您的需要(不支持进入被动模式)。幸运的是,ApacheCommons已经在flavor中为您做了大量工作。为了实现您所需要的功能,今天只需使用or,我们捕获TCP/IP数据包并确认Android/JAVA/URLConnection仍然使用端口(活动模式)进行FTP


如果服务器不支持活动模式或网络不支持活动模式,URLConnection将失败。

此答案可能是旧的?存在(由
sun.net.www.protocol.ftp.FtpURLConnection
使用),它是
ftp://
的默认处理程序,在
java.net.URLConnection.openConnection()
中,它似乎有助于PASV的使用,但不是PASV的显式设置。@DavidBullock使用“sun.net”软件包使您的代码依赖于供应商。@Thor我的观点是,如果您只想在“ftp://”URL上获取数据,那么Sun/Oracle JVM可能已经足够了,如果您只需要随意的“尽最大努力”行为。但是,是的,它没有文档记录,因此如果您必须保证您的应用程序可以获得PASV/EPSV连接,您就可以使用它如果需要的话,您需要BalusC的回答(除了他的“不支持进入被动模式”有点太强,至少在JDK6中是这样的,有400K+代表的人不应该如此无忧无虑;-P)。@DavidBullock如果您能保证您永远不会在正式的Oracle JVM之外的任何东西上运行(即IBM Java或Google应用程序引擎)如果Oracle选择在新的Java版本中重构其代码库,您愿意更新您的代码,并且Oracle说这是一件非常愚蠢的事情,那么使用非官方的未记录内部类也可以。作为紧急情况下的快速且非常肮脏的黑客,它也可以“不支持”自然是一个“没有官方API”的说法。就这么做吧right@Thor“Right”与您正在编写的程序的目标有关。请考虑
URLConnection.openConnection()的设计目标——这里有一个URL,给你一个<代码>输入流。一个可以正确地认为支持FTP://URL的任何实现都是在获取流时没有处理PASV的时候被破坏的。是的,在编写FTP客户端时,你不会依赖它。但是如果你编写一个P的应用程序,它可能是足够好的。在尽最大努力的基础上,对用户碰巧抛出的任何URL的内容进行分析。知道Sun确实想到了这一点是很有用的。