The first invocation of this method locates the default provider * object as follows:
* *If the system property * java.net.FtpClientProvider is defined then it is * taken to be the fully-qualified name of a concrete provider class. * The class is loaded and instantiated; if this process fails then an * unspecified unchecked error or exception is thrown.
If a provider class has been installed in a jar file that is * visible to the system class loader, and that jar file contains a * provider-configuration file named * java.net.FtpClientProvider in the resource * directory META-INF/services, then the first class name * specified in that file is taken. The class is loaded and * instantiated; if this process fails then an unspecified unchecked error or exception is * thrown.
Finally, if no provider has been specified by any of the above * means then the system-default provider class is instantiated and the * result is returned.
Subsequent invocations of this method return the provider that was * returned by the first invocation.
* * @return The system-wide default FtpClientProvider */ public static FtpClientProvider provider() { synchronized (lock) { if (provider != null) { return provider; } return (FtpClientProvider) AccessController.doPrivileged( new PrivilegedAction