Tôi có tệp thuộc tính chứa thuộc tính chỉ định URL của trang web NOAA chứa tập dữ liệu nhiệt độ. Thuộc tính chứa mã thông báo [DATE_REPLACE]
vì URL thay đổi hàng ngày khi NOAA tạo dự báo mới.Khắc phục java.net.MalformedURLException: không có giao thức Ngoại lệ
Trong tài sản của tôi nộp, tôi xác định:
WEATHER_DATA_URL="http://weather.noaa.gov/pub/SL.us008001/DF.anf/DC.mos/DS.mex/RD.[DATE_REPLACE]/cy.00.txt"
Tôi đã tuyên bố một phương pháp withing một lớp PropertyHelper (một wrapper cho java.util.Properties) để tạo ra chuỗi URL cho ngày hiện tại sử dụng WEATHER_DATA_URL
dưới dạng tên, "yyyyMMdd" làm định dạng ngày, ngày hôm nay.
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();
}
sau đó tôi gọi một lớp helper với phương pháp sau đây để đọc các văn bản từ trang web:
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;
}
}
Như bạn có thể thấy tôi đã cố gắng cắt không gian từ String URL được tạo ra trong hy vọng rằng điều đó đã gây ra vấn đề. Chuỗi URL được tạo đúng cách nhưng tôi nhận được ngoại lệ sau:
java.net.MalformedURLException: no protocol: "http://weather.noaa.gov/pub/SL.us008001/DF.anf/DC.mos/DS.mex/RD.20121219/cy.00.txt"
Nếu tôi đặt chuỗi theo cách thủ công, mọi thứ hoạt động ... tôi đang thiếu gì?
Cảm ơn bạn rất nhiều ** erickson **. Xin lỗi vì sai lầm của tân binh. – msomarr
Mọi người cần đôi mắt mới. – erickson