Я недавно пытался создать программу обновления для моей программы.Предполагается, что средство обновления перейдет в 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;
}
}
Однако, кажется, всегда возвращает true.Все файлы, к которым я обращаюсь, начинаются с «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 с аргументами
THEFILENAME --no-proxy --spider
но это тоже не сработало.Может кто-нибудь мне помочь?Я был бы очень признателен.
Я также видел где-то еще, что вы можете установить соединение с файлом, и если он защищен, файл существует.Если нет, то это не так.Однако я понятия не имею, как это сделать.Может кто-нибудь вытащить меня из темноты?
[EDIT]
Кроме того, работает THEFILENAME --no-proxy --spider на wget, и вывел следующее, проверяя версию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!!!
Я также попытался прочитать вывод wget, используя this и используя if (input.indexOf ("404 НЕ НАЙДЕНО") == -1), но все еще безрезультатно.