2014-07-16 59 views
0

我正尝试在java中通过读取unix命令行输出来显示所有pri状态的map地图。无法创建地图的地图

这里是我的代码

import java.io.*; 
import java.util.StringTokenizer; 
import java.util.HashMap; 
import java.util.Map; 
import java.util.Iterator; 
import java.util.HashMap; 
import java.util.Hashtable; 
import java.util.*; 
public class HelloWorld { 
    public static void main(String args[]) { 

     String s = null; 

     try { 

      Process p1 = Runtime.getRuntime().exec(new String[] {"asterisk", "-rx", "pri show spans"});    
      BufferedReader stdInput = new BufferedReader(new 
      InputStreamReader(p1.getInputStream())); 
      Map mainpri = new HashMap(); 
      BufferedReader stdError = new BufferedReader(new 
      InputStreamReader(p1.getErrorStream())); 
      int count = 1; 
      while ((s = stdInput.readLine()) != null) { 
       if(count > 2) 
       { 
       //Map pristatus = new HashMap(); 
       Hashtable<Integer, String> sourceone = new Hashtable<Integer,String>(); 
       HashMap<Integer, String> pristatus = new HashMap(sourceone); 

       System.out.println(s); 
       StringTokenizer st = new StringTokenizer(s); 
       int nextcount = 1; 
       while (st.hasMoreTokens()) { 
         if(nextcount == 1){ 
         pristatus.put(1, st.nextToken()); 

         } 
         else if(nextcount == 2){ 
         pristatus.put(2, st.nextToken()); 

         } 
         else if(nextcount == 3){ 
         pristatus.put(3, st.nextToken()); 
         } 
         else if(nextcount == 4){ 
          pristatus.put(4, st.nextToken()); 

         } 
         else{ 
         pristatus.put(5, st.nextToken()); 

         } 

        nextcount ++ ; 

       } 
        mainpri.put(1,pristatus); 
        System.out.println(mainpri); 

       } 
       count ++; 
      } 

      while ((s = stdError.readLine()) != null) { 
       System.out.println(s); 
      } 

      System.exit(0); 
     } 
     catch (IOException e) { 
      System.out.println("exception happened - here's what I know: "); 
      e.printStackTrace(); 
      System.exit(-1); 
     } 
    } 
} 

产生pristatus地图我想补充一点,值的键值形式mainpri地图

但不是总是将数据添加我上面的代码

{1={1=PRI, 2=span, 3=1/0:, 4=Up,, 5=Active}} 
{1={1=PRI, 2=span, 3=2/0:, 4=In, 5=Active}} 
{1={1=PRI, 2=span, 3=3/0:, 4=In, 5=Active}} 
{1={1=PRI, 2=span, 3=4/0:, 4=In, 5=Active}} 

但我想这是

{1={1=PRI, 2=span, 3=1/0:, 4=Up,, 5=Active}, 
{2={1=PRI, 2=span, 3=2/0:, 4=In, 5=Active}, 
{3={1=PRI, 2=span, 3=3/0:, 4=In, 5=Active}, 
{4={1=PRI, 2=span, 3=4/0:, 4=In, 5=Active}} 

我是蟒蛇变成java开发人员,所以我无法弄清楚我读了关于Hastable,但那是行不通的。

请帮我一下我在做什么错了。当你想改变地图的关键

mainpri.put(count, pristatus); 

+0

如果我正确读取了两个输出块,那么您的问题只有一个缺失逗号?此外,只要有东西说Hashtable就使用HashMap。 – tucuxi

+0

否}也缺少 – Nags

回答

1

你应该改变这一行:

mainpri.put(1,pristatus); 

来。

+0

谢谢你我现在明白了 – Nags

0

尝试使用Collections.addAll方法,当你initiallize德地图

0

你硬编码mainpri的关键1,您应该使用“计数”变量而不是“1”

mainpri.put(1,pristatus); 
0

正确指出问题出在这一行 - : mainpri.put(1,pristatus); 你总是把价值与关键1, ,而不是用 - : mainpri.put(count,pristatus);

0

您需要从1改变地图键值来算值

mainpri.put(1,pristatus)

mainpri.put(计数,pristatus)