检查是否存在以“ftp”的URL文件用java(Check if file with “ftp” u

2019-10-18 12:35发布

请,任何人都可以告诉我,我怎么能检查文件的URL,其中只有FTP协议的存在? IM使用此代码:

   public boolean exists(String URLName) throws IOException {
        input = null;
        boolean result = false;
        try {
            input = new URL(URLName).openStream();
            System.out.println("SUCCESS");
            result = true;
        } catch (Exception e) {
            System.out.println("FAIL");
        } finally {
            if (input != null) {
                input.close();
                input = null;
            }
        }
        return result;
    }

当我送有不止一个或两个它不工作,它只是最高审计机关

    sun.net.ftp.FtpProtocolException: Welcome message: 421 Too many connections (2) from this IP

        at sun.net.ftp.FtpClient.openServer(FtpClient.java:490)
        at sun.net.ftp.FtpClient.openServer(FtpClient.java:475)


at sun.net.www.protocol.ftp.FtpURLConnection.connect(FtpURLConnection.java:270)
    at sun.net.www.protocol.ftp.FtpURLConnection.getInputStream(FtpURLConnection.java:352)
    at java.net.URL.openStream(URL.java:1010)
    at bibparsing.PDFImage.exists(PDFImage.java:168)
    at bibparsing.PDFImage.main(PDFImage.java:189)

当协议是HTTP它的伟大工程。 我的意思是像不会忽略:

ftp://cmp.felk.cvut.cz/pub/cmp/articles/chum/Chum-TR-2001-27.pdf ftp://cmp.felk.cvut.cz/pub/cmp/articles/martinec/Kamberov -ISVC2006.pdf和类似的东西

Answer 1:

这里的问题是,这种方法不是线程安全的 ; 如果两个线程使用此方法同时一个可以覆盖输入命名实例变量,使得其他线程不关闭它打开的连接(和关闭或者没有,或者通过其他线程打开连接)。

这是很容易固定,通过使输入变量本地:

InputStream input=null;

代码风格:一种方法中,你可以只要你知道它返回的结果。 初学者经常声明变量,然后再执行该逻辑,并在方法结束时返回结果。 您可以节省大量的代码和复杂性

  • 声明变量尽可能晚的 (当你第一次需要他们)
  • 声明尽可能少的变量在必要时 (可读性始终是一个很好的理由来添加变量,但不变量意味着更少的复杂性)
  • 尽快回国,你知道结果 (通过您的代码路径减少,从而降低了复杂性)

该代码可以简单地写为:

public static boolean exists (String urlName) throws IOException {
    try {
        new URL(urlName).openStream().close();
        return true;
    } catch (IOException e) {
        return false;
    }
}


文章来源: Check if file with “ftp” url exists using java
标签: java file url ftp