private void downloadFile() {
		BufferedInputStream in = null;
		FileOutputStream fout = null;
		try {
			URL fileUrl = new URL(this.versionLink);
			final int fileLength = fileUrl.openConnection().getContentLength();
			in = new BufferedInputStream(fileUrl.openStream());
			fout = new FileOutputStream(new File(this.updateFolder, file.getName()));

			final byte[] data = new byte[Updater.BYTE_SIZE];
			int count;
			if (this.announce) {
				this.plugin.getLogger().info("About to download a new update: " + this.versionName);
			}
			long downloaded = 0;
			while ((count = in.read(data, 0, Updater.BYTE_SIZE)) != -1) {
				downloaded += count;
				fout.write(data, 0, count);
				final int percent = (int) ((downloaded * 100) / fileLength);
				if (this.announce && ((percent % 10) == 0)) {
					this.plugin.getLogger().info("Downloading update: " + percent + "% of " + fileLength + " bytes.");
				}
			}
		} catch (Exception ex) {
			this.plugin.getLogger().log(Level.WARNING, "The auto-updater tried to download a new update, but was unsuccessful.", ex);
			this.result = Updater.UpdateResult.FAIL_DOWNLOAD;
		} finally {
			try {
				if (in != null) {
					in.close();
				}
			} catch (final IOException ex) {
				this.plugin.getLogger().log(Level.SEVERE, null, ex);
			}
			try {
				if (fout != null) {
					fout.close();
				}
			} catch (final IOException ex) {
				this.plugin.getLogger().log(Level.SEVERE, null, ex);
			}
		}
	}