public boolean read(String path) throws IOException, SAXException {
		if (path == null)
			throw new IllegalArgumentException("Path cannot be null.");
		if (FileUtilities.isRemote(path)) {
			URL u = null;
			try {
				u = new URL(path);
			}
			catch (MalformedURLException e) {
				e.printStackTrace();
				return false;
			}
			if (ConnectionManager.sharedInstance().isCachingAllowed() && u.getQuery() == null) {
				File file = ConnectionManager.sharedInstance().shouldUpdate(u);
				if (file == null) {
					try {
						file = ConnectionManager.sharedInstance().cache(u);
						if (file == null) {
							if (!path.startsWith("jar:"))
								throw new SocketTimeoutException(path);
						}
					}
					catch (FileNotFoundException e) {
						throw new FileNotFoundException(e.getMessage());
					}
				}
				if (file != null)
					return read(file);
			}
			return read(u);
		}
		return read(new File(path));
	}