如何从Java中的/ sys / fs / cgroup /读取零长度文件?

时间:2018-03-26 10:02:18

标签: java datainputstream cgroups

我想从Java中读取/sys/fs/cgroup/文件的内容(例如cpuacct.usage)。我已经实现了基于this回答的阅读算法。 问题是cgroup文件默认为0长度。链接答案中列出的每个算法在开始读取之前确定文件的大小,并且因为file.length()返回0,它将尝试从文件中读取0个字节。

这是阅读算法:

private String readFile(File file) {
    DataInputStream stream = null;
    String content = "";

    try {
        stream = new DataInputStream(new BufferedInputStream(new FileInputStream(file)));
        final byte[] data = new byte[(int) file.length()]; // new byte[1024] throws exception

        stream.readFully(data);
        content = new String(data);
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (stream != null) {
            try {
                stream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    return content;
}

Each file is 0 byte long

2 个答案:

答案 0 :(得分:2)

以下方法(使用Java NIO)可以正常工作,即使操作系统将文件长度报告为List<Property> property

0

答案 1 :(得分:1)

我推荐IOUtils库中的Apache Commons IO课程。

由于这些文件的内容是文本,因此您可以使用$date = new \DateTime('2018-03-26 11:20:35'); $hours ='02:25:10'; preg_match("/^([0-9].*):([0-9].*):([0-9].*)/",$hours,$matches); $date->modify('+'.$matches[1].' hour'); $date->modify('+'.$matches[2].' minute'); echo $date->modify('+'.$matches[3].' second')->format('Y-m-d H:i:s'); 方法。

IOUtils.toString