有一种很好的方法可以在不可读的目录中获取文件,目录,链接的信息吗?
目前我使用Chainfire的libsuperuser库,它使我的应用程序能够以root /超级用户权限运行ls -l
之类的Shell命令。所以我能列出像'/ data / data'这样的目录内容。
/ directory:
的示例drwxr-xr-x root root 1970-08-10 14:44 acct
drwxrwx--- system cache 2014-08-06 18:03 cache
-rwxr-x--- root root 272364 1970-01-01 01:00 charger
dr-x------ root root 1970-08-10 14:44 config
lrwxrwxrwx root root 1970-08-10 14:44 d -> /sys/kernel/debug
drwxrwx--x system system 2014-08-05 20:33 data
-rw-r--r-- root root 286 1970-01-01 01:00 default.prop
drwxr-xr-x root root 2014-08-05 20:36 dev
lrwxrwxrwx root root 1970-08-10 14:44 etc -> /system/etc
and so on...
对于我的根文件管理器项目,我想将这些信息包装到Java对象中。但问题是'ls -l'的输出很难解析(因为用户可以在文件名中使用空格,可能在不同的Android版本上输出不同的'ls'......)。因此,即使我能够创建一个能够读取'ls -l'输出的解析器,它也可能非常错误且不可靠。
所以现在我想问一下是否有更好的解决方案来获取不可读目录中的文件信息(如unix-permission,owner,group ...)?
提前致谢
答案 0 :(得分:0)
尝试使用正则表达式从每行中提取文件名:
\d{2}:\d{2}\s(.+)$
我假设ls
命令的输出始终相同:
drwxrwx--- system cache 2014-08-06 18:03 cache
我们有一些文件信息,日期,时间和文件名。所以,你的代码将是这样的:
Pattern pattern = Pattern.compile("\\d{2}:\\d{2}\\s(.+)$");
for (String line : lsLines) {
Matcher matcher = pattern.matcher(line);
if (matcher.find()) {
String filename;
String tempFilename = matcher.group(1);
if (tempFilename.indexOf(" -> ") > -1) {
filename = tempFilename.split(" -> ")[1];
} else {
filename = tempFilename;
}
// Do something with filename
}
}