Ich habe eine Eigenschaftendatei, die eine Eigenschaft enthält, die die URL einer NOAA-Website angibt, die einen Temperaturdatensatz enthält. Die Eigenschaft enthält ein Token [DATE_REPLACE]
, da sich die URL täglich ändert, wenn NOAA eine neue Prognose generiert.Überwindung java.net.MalformedURLException: kein Protokoll Ausnahme
In meiner Properties-Datei, ich bin Angabe:
WEATHER_DATA_URL="http://weather.noaa.gov/pub/SL.us008001/DF.anf/DC.mos/DS.mex/RD.[DATE_REPLACE]/cy.00.txt"
Ich habe eine Methode withing eine PropertyHelper Klasse (ein Wrapper für java.util.Properties) erklärt die URL String für den aktuellen Tag zu generieren WEATHER_DATA_URL
mit wie der Name, "JJJJMMTT" als das Datumsformat, ein heutiges Datum.
public String getPropertyWithDateReplaceToken(String name, String dateFormat, Date dateToFormat)
{
String value = this.properties.getProperty(name);
if (StringHelper.isNullOrWhitespace(value) || !value.contains("[DATE_REPLACE]"))
{
throw new UnsupportedOperationException("The property value should specify the [DATE_REPLACE] token");
}
StringBuilder sb = new StringBuilder(value);
int index = sb.indexOf("[DATE_REPLACE]");
while (index != -1)
{
String replacement = StringHelper.getTodayAsDateString(dateFormat, dateToFormat);
sb.replace(index, index + "[DATE_REPLACE]".length(), replacement);
index += replacement.length();
index = sb.indexOf(value, index);
}
return sb.toString();
}
ich den Text von der Webseite dann mit dem folgenden Verfahren einen weiteren Hilfsklasse aufrufen zu lesen:
public static List<String> readLinesFromWebPage(String urlText) throws Exception
{
List<String> lines = new ArrayList<String>();
if (StringHelper.isNullOrWhitespace(urlText))
{
throw new NullPointerException("URL text cannot be null or empty");
}
BufferedReader dataReader = null;
try
{
System.out.println("URL = " + urlText);
String trimmedUrlText = urlText.replaceAll("\\s", "");
URL url = new URL(trimmedUrlText);
dataReader = new BufferedReader(new InputStreamReader(url.openStream()));
String inputLine;
while((inputLine = dataReader.readLine()) != null)
{
lines.add(inputLine);
}
return lines;
}
catch(Exception e)
{
logger.logThrow(Level.SEVERE, e, "Exception (" + e.getMessage() + ") attempting to " +
"read data from URL (" + urlText + ")");
throw e;
}
}
Wie Sie sehen, ich Leerzeichen aus der generierten URL String zu trimmen versucht haben, in der Ich hoffe, dass dies das Problem verursacht hat. Die URL-Zeichenfolge richtig erzeugt, aber ich erhalte die folgende Ausnahme:
java.net.MalformedURLException: no protocol: "http://weather.noaa.gov/pub/SL.us008001/DF.anf/DC.mos/DS.mex/RD.20121219/cy.00.txt"
Wenn ich die Zeichenfolge manuell einstellen, alles funktioniert ... was bin ich dabei?
Vielen Dank ** Erickson **. Entschuldigung für den Anfängerfehler. – msomarr
Jeder braucht manchmal ein frisches Augenpaar. – erickson