關於數據更新

先複製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();

}

}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章