在java中读取类似的文本文件时出错

时间:2015-01-22 10:38:47

标签: java linux string

我一次读一个文件,但其中一个文件没有被正确读取。文本文件来自Linux,

/sbin/ifconfig | grep "inet addr:" > ips.txt

行看起来像这样:

  inet addr:77.221.133.178  Bcast:77.221.133.183  Mask:255.255.255.248
  inet addr:77.221.133.179  Bcast:77.221.133.183  Mask:255.255.255.248
  inet addr:77.221.133.180  Bcast:77.221.133.183  Mask:255.255.255.248

文件中无法读取的行:

  inet addr:192.64.177.185  Bcast:192.64.177.255  Mask:255.255.255.128
      inet addr:192.64.182.2  Bcast:192.64.182.127  Mask:255.255.255.128
      inet addr:192.64.182.3  Bcast:192.64.182.127  Mask:255.255.255.128

java程序只需要提取IP。文件1正在被正确读取,但是从文件2中只读取了第一个IP。他们来自2个不同的服务器。一个是Centos 6.3,另一个是Centos 6.6。我猜它有一些格式或编码问题,但我无法弄明白。提取IP的代码

static ArrayList<String> list = new ArrayList<String>();
File file = new File("C:\path\ips.txt"); 

        Scanner scan = null;
        try {
            scan = new Scanner(file);
            while (scan.hasNext()) {
                extractIP(scan.nextLine());
             }

            System.out.println("IPs: "+list.size());
            System.out.println(list.toString());
        } catch (FileNotFoundException e) {
            System.out.println("file with IPs not found");
        } finally {
            if (scan != null) {
                scan.close();
            }
        }
static void extractIP (String ipString){
    String[] strarr = ipString.split("inet addr:");
    if (!(strarr[1].contains("127"))){
    list.add(strarr[1].substring(0, strarr[1].indexOf(" ")));
    }
}

我避免使用regex进行IP,因为它也提取了广播IP。

1 个答案:

答案 0 :(得分:0)

file2的第二行和第三行在127字段中包含Bcast

编辑如果您可以在Linux计算机上运行代码而不限于从文本文件中读取,则可以将所有inet地址设为

Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces();
for (NetworkInterface iface : Collections.list(nets)) {
    List<InetAddress> addrs = Collections.list(iface.getInetAddresses());
    for (InetAddress addr : addrs) {
        System.out.println(addr.toString().split("/")[1]);
    }
}