Java 检查远程服务器上的文件,如果存在,请下载

Java 检查远程服务器上的文件,如果存在,请下载,java,web-crawler,wget,download,Java,Web Crawler,Wget,Download,我最近一直在尝试为我的程序创建一个更新程序。更新程序应该转到dropbox,查看“public”文件夹中的文件,并确定它是否存在。它可以工作,可以下载文件,但无法检查文件是否存在。我看到了,我认为这是一个解决方案,但它似乎不起作用 下面是我用来检查文件是否存在的代码: public static boolean exists(String URLName) { try { HttpURLConnection.setFollowRedirects(false);

我最近一直在尝试为我的程序创建一个更新程序。更新程序应该转到dropbox,查看“public”文件夹中的文件,并确定它是否存在。它可以工作,可以下载文件,但无法检查文件是否存在。我看到了,我认为这是一个解决方案,但它似乎不起作用

下面是我用来检查文件是否存在的代码:

public static boolean exists(String URLName) {
    try {
        HttpURLConnection.setFollowRedirects(false);
        HttpURLConnection con = (HttpURLConnection) new URL(URLName)
                .openConnection();
        con.setRequestMethod("HEAD");

        return (con.getResponseCode() == HttpURLConnection.HTTP_OK);

    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
}
然而,它似乎总是返回真实。我正在访问的文件都以“App_”开头,以“.zip”结尾。唯一不同的是版本,它是#.####格式

以下是我如何检查它的完整代码:

    public static void main(String[] args) throws IOException,
            InterruptedException {

        double origVersion = 0.008;

        double versionTimes = 0.000;
        while(exists("http://dl.dropbox.com/u/.../" + "App_"+ String.valueOf(origVersion + versionTimes) + ".zip")) {
            versionTimes = round(versionTimes + 0.001);
            //origVersion = round(origVersion + 0.001);


            System.exit(0);

    }
    }
public static boolean exists(String URLName) {
        try {
            HttpURLConnection.setFollowRedirects(false);
            // note : you may also need
            // HttpURLConnection.setInstanceFollowRedirects(false)
            HttpURLConnection con = (HttpURLConnection) new URL(URLName)
                    .openConnection();
            con.setRequestMethod("HEAD");

            return (con.getResponseCode() == HttpURLConnection.HTTP_OK);

        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
    static double round(double d) {
        DecimalFormat twoDForm = new DecimalFormat("#.###");
        return Double.valueOf(twoDForm.format(d));
    }
很抱歉。。。那代码太长了。无论如何为了测试这一点,现在它将检查版本0.009是否可用。就是这样。它的完整版本是变量double origVersion。现在,如果将origVersion设置为0.009,它将检查0.01。这很好,除了App_0.01.zip不存在,但它仍然说它存在

我还研究了wget,通过使用参数启动wget来解决这个问题

文件名--无代理--spider

但这也不起作用。有人能帮我吗?我将不胜感激

我还在其他地方看到,您可以与该文件建立连接,如果它安全,则该文件存在。如果没有,它就没有。然而,我不知道该怎么做。谁能带我走出黑暗

[编辑]

此外,在wget上运行THEFILENAME--no proxy--spider工作正常,并在检查版本0.009时输出以下内容:

Spider mode enabled. Check if remote file exists.
--2012-03-16 08:59:55--  http://dl.dropbox.com/u/.../....zip
Resolving dl.dropbox.com... 107.21.103.249, 107.20.135.4, 107.20.198.68, ...
Connecting to dl.dropbox.com|107.21.103.249|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 758067 (740K) [application/zip]
Remote file exists.
检查版本0.01时:

Spider mode enabled. Check if remote file exists.
--2012-03-16 09:01:15--  http://dl.dropbox.com/u/.../....zip
Resolving dl.dropbox.com... 107.22.196.64, 50.19.217.32, 174.129.218.194, ...
Connecting to dl.dropbox.com|107.22.196.64|:80... connected.
HTTP request sent, awaiting response... 404 NOT FOUND
Remote file does not exist -- broken link!!!

我还尝试使用和使用if(input.indexOf(“404 NOT FOUND”)==-1)读取wget的输出,但仍然没有结果。

执行
头请求绝对是检查远程服务器上是否存在文件的正确方法

我看不出您的
exists(String URLName)
方法有任何错误,因此我会检查它是否被传递给您认为是的URL

奇怪的是这一行:

versionTimes = round(versionTimes + 0.001);

在检查文件是否存在和打印邮件之间,您正在更改
versiontime
的值。

执行
HEAD
请求绝对是检查远程服务器上是否存在文件的正确方法

我看不出您的
exists(String URLName)
方法有任何错误,因此我会检查它是否被传递给您认为是的URL

奇怪的是这一行:

versionTimes = round(versionTimes + 0.001);

在检查文件是否存在和打印消息之间,您正在更改
versiontime
的值。

“我最近一直在尝试为我的程序创建更新程序。”如果应用程序失败。有一个GUI,使用启动它。自动更新只是JWS提供的功能之一。谢谢!我会调查的!然而,如果webstart是一个控制台程序,它会工作吗?因为它是…“我最近一直在尝试为我的程序创建一个更新程序。”如果应用程序。有一个GUI,使用启动它。自动更新只是JWS提供的功能之一。谢谢!我会调查的!然而,如果webstart是一个控制台程序,它会工作吗?因为…谢谢你的回复!正如您所说,我使用了System.out.println(“+”HAL_“+String.valueOf(origVersion+versionTimes)+“.zip”),它将被放置到正确的位置。我还将versionTimes添加放在了whiles(exists)之前,但它仍然不起作用。可能是dropbox禁用了spider吗?我会将
System.out.println(URLName+”放在其中=+con.getResponseCode())
exists()
中,因此您可以根据特定的URL查看200或404。嗯。。。那也不管用……啊,好吧。我将重写我的整个程序在C++…更新这样的东西并不难。无论如何,谢谢你的帮助!谢谢你的回复!正如您所说,我使用了System.out.println(“+”HAL_“+String.valueOf(origVersion+versionTimes)+“.zip”),它将被放置到正确的位置。我还将versionTimes添加放在了whiles(exists)之前,但它仍然不起作用。可能是dropbox禁用了spider吗?我会将
System.out.println(URLName+”放在其中=+con.getResponseCode())
exists()
中,因此您可以根据特定的URL查看200或404。嗯。。。那也不管用……啊,好吧。我将重写我的整个程序在C++…更新这样的东西并不难。无论如何,谢谢你的帮助!