代码下载:https://files.cnblogs.com/files/xiandedanteng/StockDataDownloader20200305.rar

压缩包内包含股票代号文件,调整好日期目录,会运行Java程序就能下载。

CoderFinder类代码:

package com.hy;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.regex.Pattern; public class CoderFinder {
List<String> codeList; public CoderFinder(String filePathname) {
codeList=new ArrayList<>(); try {
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filePathname), "UTF-8"));
String line = null;
while ((line = br.readLine()) != null) {
String[] arr = line.split("\\t+"); if(isStockCode(arr[0])) {
codeList.add(arr[0]);
}
}
br.close();
} catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
} private static boolean isStockCode(String code) {
final String patternStr = "\\d+";
return Pattern.matches(patternStr, code);
} public List<String> getCodeList() {
return codeList;
} public static void main(String[] args) {
long startMs=System.currentTimeMillis(); CoderFinder cf=new CoderFinder("stockcodes.txt");
List<String> ls=cf.getCodeList();
Collections.sort(ls); StockFileDownloader downloader=new StockFileDownloader(); int index=0;
for(String code:cf.getCodeList()) {
downloader.download(code, "20190101", "20200305", "C:\\TEMP");
System.out.println(String.format("#%d %s downloaded.", index,code));
index++;
} long endMs=System.currentTimeMillis();
System.out.println("Time elapsed:"+ms2DHMS(startMs,endMs));
} /**
* change seconds to DayHourMinuteSecond format
*
* @param startMs
* @param endMs
* @return
*/
private static String ms2DHMS(long startMs, long endMs) {
String retval = null;
long secondCount = (endMs - startMs) / 1000;
String ms = (endMs - startMs) % 1000 + "ms"; long days = secondCount / (60 * 60 * 24);
long hours = (secondCount % (60 * 60 * 24)) / (60 * 60);
long minutes = (secondCount % (60 * 60)) / 60;
long seconds = secondCount % 60; if (days > 0) {
retval = days + "d" + hours + "h" + minutes + "m" + seconds + "s";
} else if (hours > 0) {
retval = hours + "h" + minutes + "m" + seconds + "s";
} else if (minutes > 0) {
retval = minutes + "m" + seconds + "s";
} else if(seconds > 0) {
retval = seconds + "s";
}else {
return ms;
} return retval + ms;
}
}

StockFileDownloader类代码:

package com.hy;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.MessageFormat; public class StockFileDownloader {
public void download(String originalCode,String fromDate,String toDate,String folder) {
try { String code="";
if(originalCode.startsWith("6")) {
code="0"+originalCode;
}else {
code="1"+originalCode;
} String raw="http://quotes.money.163.com/service/chddata.html?code={0}&start={1}&end={2}&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP";
Object[] arr={code,fromDate,toDate};
String urlPath = MessageFormat.format(raw, arr); URL url = new URL(urlPath);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.connect();
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
InputStream inputStream = connection.getInputStream();
File dir = new File(folder);
if (!dir.exists()) {
dir.mkdirs();
}
File file = new File(dir, originalCode+".txt");
FileOutputStream fos = new FileOutputStream(file);
byte[] buf = new byte[1024 * 8];
int len = -1;
while ((len = inputStream.read(buf)) != -1) {
fos.write(buf, 0, len);
}
fos.flush();
fos.close();
} } catch (Exception e) {
e.printStackTrace();
}
}
}

--2020年3月5日--

又完成一个小小的心愿,又前进了小小的一步。

最新文章

  1. tp5 model 中的类型转换
  2. Angular-ngtable
  3. oracle表结构和表内容差异比对
  4. show一下自己的文档编写功底
  5. 45个JavaScript小技巧
  6. gitbook使用
  7. HDU 4721 Food and Productivity (二分+树状数组)
  8. 删除bin后,Eclipse重新编译项目
  9. 远程SSH连接服务与基本排错
  10. Java 多态的实现原理
  11. Java高级篇(一)——线程
  12. oozie: GC overhead limit exceeded 解决方法
  13. tf.reducemean()到底是什么意思?
  14. macOS终端开启TAB键自动补全功能(不区分大小写)
  15. # 【Python3练习题 003】一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
  16. JAVA线程池ScheduledExecutorService周期性地执行任务 与单个Thread周期性执行任务的异常处理
  17. 【C++】C++中assert和ENDEGU预处理语句
  18. 防止重复提交demo
  19. Composer 安装时要求输入授权用户名密码
  20. 【代码笔记】iOS-MBProgressHUD-Demo

热门文章

  1. 19、State 状态模式
  2. 6、Java 运算符
  3. 使用Luhn算法实现信用卡号验证
  4. Secure CRT连接VMware虚拟机中的CentOS 7
  5. NGINX+PHP+POSTGRESQL+ZABBIX 5.X
  6. 谁来教我渗透测试——黑客必须掌握的HTML基础(二)
  7. C#LeetCode刷题之#441-排列硬币(Arranging Coins)
  8. Flutter 打包程序 build android apk
  9. 学习Python(新手教程链接)
  10. 带你用 Python 实现自动化群控设备