从文本文件中获取值

时间:2015-02-09 18:46:30

标签: java

我是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;
    }

我如何才能获得这些数字?

3 个答案:

答案 0 :(得分:1)

如果您确定文件格式,可以只使用commons-ioString.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