将文件数据传递到函数

时间:2015-06-24 06:46:06

标签: java file snmp

您好我一直在尝试将文件中的ipAdresses传递给执行GET操作的SNMP功能。我正在逐行读取文件并传递数据。但是我在setAddress收到错误,如果我没有从文件中传递,该程序的工作正常。在代码中看到第1行已注释ipAddress;

代码:

package com.snmp.discovery;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream.GetField;

import org.snmp4j.CommunityTarget;
import org.snmp4j.PDU;
import org.snmp4j.Snmp;
import org.snmp4j.TransportMapping;
import org.snmp4j.event.ResponseEvent;
import org.snmp4j.mp.SnmpConstants;
import org.snmp4j.smi.Integer32;
import org.snmp4j.smi.OID;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.UdpAddress;
import org.snmp4j.smi.VariableBinding;
import org.snmp4j.transport.DefaultUdpTransportMapping;

public class Discover1 {

    private static String  port    = "8001";

    // OID of MIB CISCO-MGMT-MDM; Scalar Object = .iso.org.dod.internet.mgmt.mib-2.system.sysDescr.0
    private static String  oidValue  = ".1.3.6.1.2.1.1.5.0";  // ends with 0 for scalar object

    private static int    snmpVersion  = SnmpConstants.version1;

    private static String  community  = "public";
    public static void main(String[] args) {
         try {
            // Open the file that is the first 
            // command line parameter
            FileInputStream fstream = new FileInputStream("textfile.txt");
            // Get the object of DataInputStream
            DataInputStream in = new DataInputStream(fstream);
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            String strLine;
            //Read File Line By Line
            while ((strLine = br.readLine()) != null)   {
              // Print the content on the console
                Discover1.getDevice(strLine);
            }
            //Close the input stream
            in.close();
        }catch (Exception e){//Catch exception if any
            System.err.println("Error: " + e.getMessage());
        }
    }
    public static void getDevice(String a) throws Exception {
        System.out.println("SNMP GET Demo");
        System.out.println(a);
        // Create TransportMapping and Listen
        TransportMapping transport = new DefaultUdpTransportMapping();
        transport.listen();

        // Create Target Address object
        CommunityTarget comtarget = new CommunityTarget();
        comtarget.setCommunity(new OctetString(community));
        comtarget.setVersion(snmpVersion);

        comtarget.setAddress(new UdpAddress(a+"/"+port));
        System.out.println("------------");
        comtarget.setRetries(2);
        comtarget.setTimeout(1000);

        // Create the PDU object
        PDU pdu = new PDU();
        pdu.add(new VariableBinding(new OID(oidValue)));
        pdu.setType(PDU.GET);
        pdu.setRequestID(new Integer32(1));

        // Create Snmp object for sending data to Agent
        Snmp snmp = new Snmp(transport);

        System.out.println("Sending Request to Agent...");
        ResponseEvent response = snmp.get(pdu, comtarget);

        if (response != null){
            System.out.println("Got Response from Agent");
            PDU responsePDU = response.getResponse();

            if (responsePDU != null){
                int errorStatus = responsePDU.getErrorStatus();
                int errorIndex = responsePDU.getErrorIndex();
                String errorStatusText = responsePDU.getErrorStatusText();

                if (errorStatus == PDU.noError){
                    System.out.println("Snmp Get Response = " + responsePDU.getVariableBindings());
                } else {
                    System.out.println("Error: Request Failed");
                    System.out.println("Error Status = " + errorStatus);
                    System.out.println("Error Index = " + errorIndex);
                    System.out.println("Error Status Text = " + errorStatusText);
                }
            } else {
                System.out.println("Error: Response PDU is null");
            }
        } else {
            System.out.println("Error: Agent Timeout... ");
        }
        snmp.close();
    }
}

2 个答案:

答案 0 :(得分:0)

所以这可能不完全是一个答案,但它不符合评论。

这很糟糕:

catch(Exception e) { .... }

如果有人使用ELSE的方法throws Exception,则只能这样做。另外,如果可以的话,打那个人。

你自己的方法不应该methodName() throws Exception。它应具体methodName () throws IOException等。

你应该做catch(IOException e) { ... } catch(IllegalArgumentException e) {...}

正如您所见,如果您不知道抛出什么样的异常,就很难排除故障。

最后,在寻求Exception的帮助时,通常应该包括堆栈跟踪。例如:

Exception in thread "main" java.lang.NullPointerException       at com.example.myproject.Book.getTitle(Book.java:16)         at com.example.myproject.Author.getBookTitles(Author.java:25)      at com.example.myproject.Bootstrap.main(Bootstrap.java:14)

此信息有助于调试。

答案 1 :(得分:-1)

从错误消息中看起来文件中有空格。当您直接传递IP地址时,没有空格,因此它可以工作。您需要在使用之前删除空格。

更改以下行

Discover1.getDevice(strLine);

删除前导和尾随空格。像:

选项1:

Discover1.getDevice(strLine.trim());

选项2:

Discover1.getDevice(StringUtils.trim(strLine));

参考:StringUtils