我正在使用java程序从NSE的网站获取NSE的股价数据,例如:
url = new URL("https://archives.nseindia.com/archives/equities/bhavcopy/pr/PR071122.zip");
f = new File("NSEData.zip");
try {
FileUtils.copyURLToFile(url, f);
} catch (Exception e) {
}
以上代码适用于存在市场数据的日期,如07/11/22。然而,在数据不存在的地方,比如在08/11/22,url被破坏,并且copyURLToFile行在运行时无限期地卡住(用上面url/代码中的081122替换071122将导致它卡住)。是否有一个简单的方法,让程序认识到,某个日期的url被打破(如。https://archives.nseindia.com/archives/equities/bhavcopy/pr/PR081122.zip),因此忽略并继续过去的try
块没有卡住?
我目前的解决方法是使用DayOfWeek检查以及包含公共假期列表的HashSet检查某个日期是否为市场假日,但这并不完美。
所以,基本上你的URL在请求无效日期时返回500错误。您可以简单地使用FileUtils
中提供的另一个方法https://commons.apache.org/proper/commons io/javadocs/api - 2.5 -/- org/apache/commons/io/fileutils.html # copyURLToFile (% 20 java.io.file java.net.URL, % 20 int, int % 20)
示例代码:(根据您的要求调整超时时间)
var url = new URL("https://archives.nseindia.com/archives/equities/bhavcopy/pr/PR081122.zip");
var f = new File("NSEData.zip");
try {
FileUtils.copyURLToFile(url, f, 5000, 5000);
} catch (Exception e) {
}