2014-09-19 45 views
0

讀取特定行我有有這樣如何在Java中

Fri Sep 19 19:16:39 UTC 2014 
Test launched. Check every minute for an update 
minute 9: 
ec2-54-84-5-158.compute-1.amazonaws.com: Requests per second: 926.13 [#/sec] (mean) 
---------------------- 
minute 10: 
ec2-54-84-5-158.compute-1.amazonaws.com: Requests per second: 919.23 [#/sec] (mean) 
---------------------- 
minute 11: 
ec2-54-209-65-210.compute-1.amazonaws.com: Requests per second: 547.62 [#/sec] (mean) 
ec2-54-84-5-158.compute-1.amazonaws.com: Requests per second: 875.14 [#/sec] (mean) 
---------------------- 
minute 12: 
ec2-54-209-65-210.compute-1.amazonaws.com: Requests per second: 862.83 [#/sec] (mean) 
ec2-54-84-5-158.compute-1.amazonaws.com: Requests per second: 876.78 [#/sec] (mean) 
---------------------- 
minute 13: 
ec2-54-209-65-210.compute-1.amazonaws.com: Requests per second: 857.37 [#/sec] (mean) 
ec2-54-84-5-158.compute-1.amazonaws.com: Requests per second: 880.64 [#/sec] (mean) 
---------------------- 

它基本上是不斷更新,每分鐘內容的文件。所以我想從這兩個「------------」行之間的最後一個塊獲取最後的數據。最終目的是總結該區塊每秒的請求。你能否引導我應用最好的邏輯?

+3

請注意你的問題標題不是你實際要求的。爲什麼不跟蹤tokenstream的「每秒請求次數」,然後獲取後續號碼? – 2014-09-19 19:45:23

+0

你是指兩條虛線之間的最新值? – 2014-09-19 19:58:35

+0

。只需在最近一分鐘內對每秒的請求進行總計。分鐘13在這種情況下 – 2014-09-19 20:08:01

回答

1

此代碼將識別每秒請求數(字段#5),並將識別當前行上每秒請求數與包含每秒請求數的最後一行(最近)行之間的差異。

此代碼假設每秒請求數總是出現在以世界「分鐘」(不含引號)開頭的行後面的行上。

try{ 
     BufferedReader br = new BufferedReader(new FileReader("C:\\TEMP\\MINUTE.txt")); 

     String line; 
     String[] lineFields; 
     int  i; 
     int  thisLine_minute; 
     int  lastLine_minute; 
     Double thisLine_reqpersec; 
     Double lastLine_reqpersec; 
     lastLine_minute = 0; 
     thisLine_reqpersec= 0.0; 
     lastLine_reqpersec= 0.0; 
     while ((line = br.readLine()) != null) { 

      lineFields = line.split("\\s+"); 
      System.out.printf("LINE READ: %s\n", line); 
      for (i=0; i < lineFields.length; i++) { 
       System.out.printf("FIELD: %d IS: %s\n", i, lineFields[i]); 
      } 
      if (lineFields[0].toUpperCase().equals("MINUTE")) { 
       thisLine_minute=1; 
      } 
      else { 
       thisLine_minute=0; 
      } 
      try { 
      if (lastLine_minute==1) { 
       lastLine_reqpersec = thisLine_reqpersec; 
       thisLine_reqpersec = new Double(lineFields[4]); 
      } 
      } 
      catch (Exception excepStrToInt) { 
       thisLine_reqpersec = 0.0; 
      } 
      System.out.printf("*** REQUESTS PER SECOND: %f\n", 
      thisLine_reqpersec); 
      System.out.printf("*** REQUESTS PER SECOND: DIFFERENCE: %f\n", 
      (thisLine_reqpersec- lastLine_reqpersec)); 

      lastLine_minute=thisLine_minute; 
     } 
     br.close(); 
    } 
    catch(Exception e){ 
    } 
0

你也許可以做你想要將是一個split string

String yourBlocks[] = yourEntireFileInString.split("----------------------"); 

然後塊

yourBlocks[yourBlocks.length-2] 

進一步,你想要做什麼是

int numberRequest,numberRequest1; 
String tempNumber; 
for(String myString : yourBlocks) { 
    String [] splitedString = myString.split("Requests per second:"); 
    tempNumber=""; 
    for(int i = 0;i< splitedString[1].length ; i++) { 
      if(Charachter.isDigit()){ 
       tempNumber+=splitedString[i]; 
      } 
      if('#'==splitedString[i]){ 
       break; 
      } 
    } 
    numberRequest = Integer.parseInt(tempNumber); 
    tempNumber=""; 
    for(int i = 0;i< splitedString[3].length ; i++) { 
      if(Charachter.isDigit()){ 
       tempNumber+=splitedString[i]; 
      } 
      if('#'==splitedString[i]){ 
       break; 
      } 
    } 
    numberRequest1 = Integer.parseInt(tempNumber); 
    // use numberRequest, numberRequest1 here 
} 

這可能不是非常高效,但會讓你達到理想的效果。

0
String result=""; 
BufferedReader bf = new BufferedReader(new FileReader("your_file_path")); 
int dashCount=0; 
String finalResult= ""; 
while ((result = bf.readLine()) != null) { 
if (result.length() != 0) { 
    if (result.charAt(0) == ’-’) { 

     dashCount=dashCount+1; 
     if(dashCount==2) break; 

                } 
     finalResult+=result; 

          } 
            } 
0

所以你想用虛線結束每個塊內的值相加,對不對?而不是試圖分開文件,只需逐行閱讀,直到您到達文件結尾,並對您所來的任何行進行適當反應:

  • 如果它是帶有「每秒請求數「,解析出該值並將其添加到該塊的總和中。
  • 如果它是一個帶有「---」的行,那麼這個塊就完成了,所以不管你要對結果做什麼,並將總和重置爲0,所以你準備好開始下一個塊。
  • 如果是其他行,請忽略它並閱讀下一行。

如果你正在尋找做所有的每秒款項的東西(如取它們的平均值),然後做任何你需要每讀完一個塊的時間做。如果你關心的只是最後一個塊,那麼就保存你每次計算的最後一筆總和,覆蓋最後一個值;當你點擊文件中的最後一條虛線時,你已經計算並保存了最後一個塊的總和,並且它將在那裏供你閱讀並根據需要進行操作。但我的直覺說,你會想要使用所有的值,而不僅僅是最後一個...