`
XiAoOMAn07
  • 浏览: 74762 次
  • 性别: Icon_minigender_1
  • 来自: 温州
社区版块
存档分类
最新评论

关于数据更新

阅读更多
先复制GuPiao2.txt (更新后的数据)的内容到GuPiao1.txt(暂存)再将网页数据抓取存入GuPiao.txt
取GuPiao.txt 的行的时间与GuPiao1.txt的行的时间进行比较,将新数据存入GuPiao2.txt.

方法是自己探索编写的,发现很笨拙存在较大问题,将尝试换思路考虑另外可行的方法

经验小结:先有全局的构思和清晰的思路是很重要的,在没有好的建模思想和在含糊的思路下出来的代码,后果将比想象中的严重,不但会花费更多的时间,而且导致代码难以阅读和完善

/*
 * import java.io.BufferedReader;
 * import java.io.File;
 * import java.io.FileReader;
 * import java.io.IOException;
 * import java.util.regex.Matcher;
 * import java.util.regex.Pattern;
*/
import java.net.*;
import java.io.*;
import java.util.regex.*;
import java.util.Scanner;
public class DataUpdate{

	public static void main(String[] args) throws IOException {

		Scanner sc = new Scanner(System.in);
		String s;
		String str = null;
		String str1 = null;
		int daima;
		int year;
		int jidu;
		int i = 0;
		int j = 0 ;
		System.out.println("输入股票代码");
		daima = sc.nextInt();
		System.out.println("输入要插入的年份");
		year = sc.nextInt();
		System.out.println("输入要插入的季度");
		jidu = sc.nextInt();
		
		
		//网页地址
//根据输入的股票代码插入的年份和季度进行查找
		URL gupiao = new URL("http://money.finance.sina.com.cn/corp/go.php/vMS_MarketHistory/stockid/" + daima +".phtml?year=" + year + "&jidu=" + jidu);
		//创建输入流
		BufferedReader br = new BufferedReader(new InputStreamReader(gupiao.openStream()));
//复制GuPiao.txt到GuPiao1.txt
		//创建输出文档	
		FileOutputStream fosout = new FileOutputStream("D:\\XiAoOMAn\\GuPiao1.txt");
		File file=new File("D:\\XiAoOMAn\\GuPiao.txt");//
		FileReader fr=new FileReader(file);//创建文件输入流 
		BufferedReader in=new BufferedReader(fr);//包装文件输入流,整行读取
		OutputStreamWriter owsout = new OutputStreamWriter(fosout);
		while ((str = in.readLine()) != null){
			
	 		owsout.write(str);
			owsout.write("\r\n") ;
		}
	owsout.close();
	fosout.close();//保存gupiao1.txt,关闭
		FileOutputStream fos = new FileOutputStream("D:\\XiAoOMAn\\GuPiao.txt");
	
		FileOutputStream fosreason = new FileOutputStream("D:\\XiAoOMan\\Gupiao2.txt");

		//创建输出流
		OutputStreamWriter ows = new OutputStreamWriter(fos);
		
		OutputStreamWriter owsreason = new OutputStreamWriter(fosreason);
		
		
		
		//匹配需要获取的数据的列名
		Pattern q = Pattern.compile("((?<=g>)(\\w*?)).*?(?=(</strong>))");
		//匹配数据
		Pattern p = Pattern.compile("((?<=date=)(\\w*?)).*?(?=('>))|((?<=center\">)(\\d{1,7}?)).*?(?=(</div>))");
		//将 gupiao.txt的内容存入gupiao1.txt
		while ((str = in.readLine()) != null){
			
		 		owsout.write(str);
				owsout.write("\r\n") ;
			}
		owsout.close();
		fosout.close();//保存gupiao1.txt,关闭
		//获取源文件内容 匹配 输出
		while ((str = br.readLine()) != null) {
			//j++;
			//列名
			Matcher n = q.matcher(str);
			//数据
			Matcher m = p.matcher(str);

			//提取 列名
			while (n.find()) {
				
				//形式转换 成 String
				s = String.valueOf(n.group());
				//输出到文本文档
				ows.write(s + "		 ");
				System.out.printf("%-44s", n.group());
				
			}
			//提取 数据
			while (m.find()) {
				if (i == 0){
					System.out.println();
					ows.write("\r\n");
				}
				i++;
				s = String.valueOf(m.group());
				ows.write(s + "	   ");
				System.out.printf("%-22s", m.group());
				//每输出完一行 回车
				if (i % 7 == 0)
				{
					System.out.println();
					ows.write("\r\n") ;
				}
			}
		
		}
		//System.out.println(j);
		ows.close();
		fos.close();
		br.close();
		fr.close();
		fosout.close();//关闭输出流。
		



功能未完善的程序部分,本来以为会比较简单,结果发现这个方法繁琐且不可行
/
		File file21=new File("D:\\XiAoOMAn\\GuPiao.txt");//
		File file22=new File("D:\\XiAoOMAn\\GuPiao1.txt");//
		FileReader fr21=new FileReader(file21);
		FileReader fr22=new FileReader(file22);
		BufferedReader in21=new BufferedReader(fr21);
		BufferedReader in22=new BufferedReader(fr22);
		str = in21.readLine();
		owsreason.write(str);
		owsreason.write("\r\n") ;
		in21.readLine();
		in22.readLine();
		in22.readLine();
		str = in21.readLine();
		str1 = in22.readLine();
		String[] date = str.split("-");//以 - 为间隔将一行数据拆分。2009-10-15 可以拆分为 2009 10 15
		String[] date1 = str1.split("-");
		int []num = new int[3]; 
		int []num1 = new int[3];
		num[0]=Integer.parseInt(date[0]);//转化为整数
		//num[1]=Integer.parseInt(date[1]);//
		//num[2]=Integer.parseInt(date[2]);//
		num1[0]=Integer.parseInt(date1[0]);//
		//num1[1]=Integer.parseInt(date1[1]);//
		//num1[2]=Integer.parseInt(date1[2]);//	
		if(num[0] > num1[0]){
			owsreason.write(str);
			owsreason.write("\r\n") ;
			while((str = in21.readLine()) != null){
				owsreason.write(str);
				owsreason.write("\r\n") ;
			}
				owsreason.write(str1);
				owsreason.write("\r\n") ;
				while((str1 = in22.readLine()) != null){
						owsreason.write(str1);
						owsreason.write("\r\n") ;
			}
		}
		
		else{
			owsreason.write(str1);
			owsreason.write("\r\n") ;
			while((str1 = in22.readLine()) != null){
					owsreason.write(str1);
					owsreason.write("\r\n") ;
			}
			owsreason.write(str);
			owsreason.write("\r\n") ;
			while((str = in21.readLine()) != null){
				owsreason.write(str);
				owsreason.write("\r\n") ;
		
			
		}
		
		owsreason.close();
		fosreason.close();

	}

	}
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics