有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将文件数据传递到函数中

您好,我一直在尝试将文件中的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) 个答案

  1. # 1 楼答案

    所以这可能不是一个确切的答案,但它不适合评论

    这很糟糕:

    catch(Exception e) { .... }

    仅当其他人的方法throws Exception时才执行此操作。还有,如果可以的话,打那个人

    你自己的方法不应该methodName() throws Exception。它应该特别地methodName () throws IOException等等

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

    正如您所看到的,如果您不知道引发了什么样的异常,则很难进行故障排除

    最后,在请求异常帮助时,通常应包括堆栈跟踪。例如:

    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)

    此信息有助于调试

  2. # 2 楼答案

    从错误消息来看,文件中似乎有空格。当您直接传递IP地址时,没有空格,因此它可以工作。您需要先删除空格,然后再使用它

    换行

    Discover1.getDevice(strLine);
    

    删除前导空格和尾随空格。比如:

    选项1:

    Discover1.getDevice(strLine.trim());
    

    选项2:

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

    参考:StringUtils