我想从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;
}
答案 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