我正在尝试使用以下代码从我的android获取所有的mac和IP。但是以下代码仅适用于Java。我想在Kotlin中使用它,所以我尝试了Java到Kotlin转换器。但这没有用。谁能告诉我代码的以下部分将如何在kotlin中使用:
listNote.clear();
BufferedReader bufferedReader = null;
try {
bufferedReader = new BufferedReader(new FileReader("/proc/net/arp"));
String line;
while ((line = bufferedReader.readLine()) != null) {
String[] splitted = line.split(" +");
if (splitted != null && splitted.length >= 4) {
String ip = splitted[0];
String mac = splitted[3];
if (mac.matches("..:..:..:..:..:..")) {
Node thisNode = new Node(ip, mac);
listNote.add(thisNode);
}
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
答案 0 :(得分:1)
由于“分配不是表达式”,因此自动转换无法处理while循环。
您可以使用内置的Readers扩展功能forEachLine
来解决此问题,在这种情况下,每一行作为lambda表达式的唯一参数传递为it
:
var bufferedReader: BufferedReader? = null
try {
bufferedReader = BufferedReader(FileReader("/proc/net/arp"))
bufferedReader.forEachLine {
val splitted = it.split(" +".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
if (splitted.size >= 4) {
val ip = splitted[0]
val mac = splitted[3]
if (mac.matches("..:..:..:..:..:..".toRegex())) {
listNote.add(Node(ip, mac))
}
}
}
} catch (e: IOException) {
e.printStackTrace()
} finally {
try {
bufferedReader?.close()
} catch (e: IOException) {
e.printStackTrace()
}
}
您还可以删除FileNotFoundException
,因为它是IOException
的子类,并且catch块相同。