Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用shell命令-Android解析`ls-l`返回的结果_Android_Shell Exec - Fatal编程技术网

如何使用shell命令-Android解析`ls-l`返回的结果

如何使用shell命令-Android解析`ls-l`返回的结果,android,shell-exec,Android,Shell Exec,请我真的需要帮助如何解析结果返回的 “ls-l”命令 我真的需要它来获取我的文件管理器应用程序中的私有目录(例如“/data/data”dir)的列表和详细信息,在用户被授予su访问权限之后 下面是执行命令后预期返回的结果示例 getRunTime().exec(“ls-l/data/data”) 我已经看到了一个类似的解决方案,但是在php中使用了ftp_rawlist()函数,但是我想要一个Java/Android解决方案,请 我知道这需要正则表达式或模式…等等。。 你的帮助将得到高度赞赏你

请我真的需要帮助如何解析结果返回的 “ls-l”命令 我真的需要它来获取我的文件管理器应用程序中的私有目录(例如“/data/data”dir)的列表和详细信息,在用户被授予su访问权限之后

下面是执行命令后预期返回的结果示例 getRunTime().exec(“ls-l/data/data”)

我已经看到了一个类似的解决方案,但是在php中使用了ftp_rawlist()函数,但是我想要一个Java/Android解决方案,请

我知道这需要正则表达式或模式…等等。。
你的帮助将得到高度赞赏

你让事情变得比需要的更困难;Android有一个
文件
类,内置了以下功能:

File f = new File(path);        
File files[] = f.listFiles();
这将为您提供该路径中的文件和文件夹数组。有关
文件的文档可在此处找到:

您试图解析哪些数据?如果要查找特定字符串,可以使用grep。(至少,在Linux上你可以使用grep,我假设它也包含在Android中,但我自己还没有尝试过。)

ls-l | grep targetString

首先,你

然后你:


然后是一个很好的字符串数组,其中
parsed[6]
是文件名,或者
parsed[5]
如果是目录,因为
ls-l
不会打印目录的大小。作为额外的奖励,它不会把文件名和空格弄乱。

谢谢,我使用它来创建普通的文件列表,但是file类不能列出私有目录,特别是使用su命令。如果应用程序以root身份运行(无论如何,它必须以root身份执行
ls
),它应该不需要
su
命令。您具体说的是什么私有目录?App itslef不能在root帐户下运行,即使授予超级用户权限-它使用“su”shell命令在root帐户下执行脚本。@Sector95,设备不需要是root才能运行
ls
。此外,开发人员确实需要调用
su
,并保持shell打开以root身份运行二进制文件。用换行符拆分输出并从那里进行解析。正如我使用“cygwin”对Windows做的相同操作一样,这是一个在Windows上模拟linux命令的极好工具。非常感谢,您的回答确实有效,但对于既不以“d”或“-”开头的文件,我遇到了一些以“l”开头的文件的问题
File f = new File(path);        
File files[] = f.listFiles();
if (str[0] == 'd') // Directory
    String[] parsed = str.split("\\s+", 6);
else
    String[] parsed = str.split("\\s+", 7);