我一次读一个文件,但其中一个文件没有被正确读取。文本文件来自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。
答案 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]);
}
}