我是Java的新手。你能帮我用Java获取这些文本文件中的数字:
$ cat /proc/net/sockstat
sockets: used 8278
TCP: inuse 1090 orphan 2 tw 18 alloc 1380 mem 851
UDP: inuse 6574
RAW: inuse 1
FRAG: inuse 0 memory 0
编辑:
我测试了这段代码:
public String getData() throws IOException
{
byte[] fileBytes;
File myFile = new File("/proc/net/sockstat");
if (myFile.exists())
{
try
{
fileBytes = Files.readAllBytes(myFile.toPath());
}
catch (java.nio.file.AccessDeniedException e)
{
return null;
}
if (fileBytes.length > 0)
{
return new String(fileBytes);
}
}
return null;
}
我如何才能获得这些数字?
答案 0 :(得分:1)
如果您确定文件格式,可以只使用commons-io和String.split
:
package org.example;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.util.List;
public class Sample {
public static void main(String[] args) {
File file = new File("/proc/net/sockstat");
try {
// THIS IS IMPORTANT
List<String> lines = FileUtils.readLines(file);
int tcpInUse = Integer.parseInt(lines.get(1).split(" ")[2]);
// END OF IMPORTANT THINGS. REST IS JUNK
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
请注意我目前无法访问java IDE,因此它有点&#34;盲代码&#34; (但它应该运行)
答案 1 :(得分:0)
使用Scanner
类来实现此目的。
Scanner s = new Scanner(new File(filepath));
然后使用while循环遍历并将结果添加到ArrayList
(或者只是附加一个字符串,无论你想要什么)
ArrayList<String> strings = new ArrayList<String>();
while(s.hasNext())
strings.add(s.nextLine); //or s.next if word for word
然后只提取数字。
或者,你可以改为使用它:
ArrayList<Integer> ints = new ArrayList<Integer>();
while(s.hasNext)
try{
int i = Integer.parse(s.next());
ints.add(i);
}catch(Exception e){}
catch(RuntimeException e){}
这将从您的文件
创建一个整数ArrayList答案 2 :(得分:0)
&#34;你能帮我从这个文本文件中获取数字&#34;
您可以使用正则表达式识别文本中的所有数字。
String doc = "$ cat /proc/net/sockstat sockets: used 8278 TCP: inuse 1090 orphan 2 tw 18 alloc 1380 mem 851 UDP: inuse 6574 RAW: inuse 1 FRAG: inuse 0 memory 0";
Pattern p = Pattern.compile("-?\\d+");
Matcher m = p.matcher(doc);
while (m.find()) {
System.out.println(m.group());
}
这将打印出一个列表
8278 1090 2 18 1380 851 6574 1 0 0