2015-06-22 23 views
0

enter image description here我敢肯定,我真的很接近得到這方面的工作。我有一個包含批處理文件輸出的文本文件。我想從文本文件中將計算機名稱分配給JLabel selectedComputerFromAD。目前,文本文件輸出如下所示:分配文本文件中的數據,以Java變量

"CN=COUD111235,OU=Workstations,OU=Mis,OU=Accounts,DC=FL,DC=NET" 

我需要抓住什麼CN等於所以我想是lblSelectedComputer = COUD111235 這裏是我到目前爲止所。

  ComputerQuery.sendParam(); 

      String sCurrentLine = null, CN = null; 
      try (BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\anoc5f\\workspace\\ControlPanel\\resultofbatch.txt"))) 
       { 

        while ((sCurrentLine = br.readLine()) != null) 
        { 
         if(sCurrentLine.matches(".*CN=([^,]*).*")) 
         { 

          Pattern p1 = Pattern.compile(".*CN=([^,]*),"); 
          Matcher m = p1.matcher(sCurrentLine); 
          m.find(); 
          CN = m.group(1); 
         } 

        } 

        if(CN != null) 
        { 
         //TODO do somethign with CN 
         System.out.println(CN); 
        } 
        else 
        { 
         System.out.println("CN not found"); 
        } 

       } catch (FileNotFoundException e1) { 
        e1.printStackTrace(); 
       } catch (IOException e1) { 
        e1.printStackTrace(); 
       } 


      } 


    }); 

當前selectedComputerFromAD.setText(sCurrentLine);不起作用。我甚至不完全確定我正在給它分配正確的變量。任何幫助表示讚賞。

+0

什麼目前不工作?根本沒有設置文本,或者是整行設置爲文本? –

+0

目前使用上面的代碼,我得到一個空指針異常。如果我把它放在while循環內,然後它輸出的同時循環經過 – user6680

回答

1

這爲我工作:

String str = "CN=COUD111235,OU=Workstations,OU=Mis,OU=Accounts,DC=FL,DC=NET"; 
    String regex = "CN=([^,]*),"; 
    Pattern p = Pattern.compile(regex); 
    Matcher m = p.matcher(str); 
    m.find(); 
    String computerName = m.group(1); 

完整的示例參考代碼:

import java.io.BufferedReader; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 


public class Test { 

    public static void main(String[] args) 
    { 
     String sCurrentLine = null, CN = null; 
     try (BufferedReader br = new BufferedReader(new FileReader("resultofbatch.txt"))) 
     { 

      while ((sCurrentLine = br.readLine()) != null) 
      { 
       if(sCurrentLine.matches(".*CN=([^,]*).*")) 
       { 

        Pattern p = Pattern.compile(".*CN=([^,]*),"); 
        Matcher m = p.matcher(sCurrentLine); 
        m.find(); 
        CN = m.group(1); 
       } 

      } 

      if(CN != null) 
      { 
       //TODO do somethign with CN 
       System.out.println(CN); 
      } 
      else 
      { 
       System.out.println("CN not found"); 
      } 

     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 


    } 

} 
+0

這隻會從硬編碼字符串中獲取計算機名稱,而不是從文本文件中獲取。 – user6680

+0

我想你可以填空。你可以在while循環條件中編輯while(!m.find())來讀取每一行。 –

+0

我很抱歉,但我不完全明白你的意思與while循環。我不是最好的Java。你有沒有可能向我展示一個可行的例子? – user6680

0

您使用的模式錯誤。你不是分裂sCurrentLine,但字符串","

您還需要在事件派發線程內部調用setText(),否則直到完全重新繪製(如果您最小化和最大化框架,它應該可見)纔會看到它。

+0

其實,你要分配的令牌[0] .split(「=」)[1] –

0

這應該工作:

String CN = sCurrentLine.split("CN=",-1)[1].split(",",-1)[0]; 
+0

我加入這行代碼的每一臺計算機的名字,但我得到一個空指針異常。如果我把它放在while循環中,那麼它會輸出while循環經過的每個計算機名稱。我更新了上面的代碼。 – user6680

+0

請解釋/更新您的答案。 – Dropout

相關問題