如何使用 shell 命令解析 ls -l 返回的结果 - Android
How to parse result returned by `ls -l ` using shell command - Android
关于如何解析返回的结果,我真的需要帮助
“ls -l”命令
在用户被授予 su 访问权限
之后,我真的需要它来获取我的文件管理器应用程序中私人目录(例如“/data/data”目录)的列表和详细信息
下面是执行命令后预期返回的结果示例
getRunTime().exec("ls -l /data/data");
> u0_a192@Infinix_X507:/ $ ls -l /storage/sdcard0
drwxrwx--- root sdcard_r 2015-08-14 22:23 2go
drwxrwx--- root sdcard_r 2015-08-15 11:26 360
drwxrwx--x root sdcard_r 2015-08-13 10:25 Android
drwxrwx--- root sdcard_r 2015-08-29 21:09 AppProjects
drwxrwx--- root sdcard_r 2014-01-01 00:00 Assistant
drwxrwx--- root sdcard_r 2015-08-18 10:44 Camera360
drwxrwx--- root sdcard_r 2015-08-11 21:29 DCIM
-rw-rw---- root sdcard_r 808 2015-08-19 05:36 Document.txt
drwxrwx--- root sdcard_r 2015-08-30 07:19 Download
drwxrwx--- root sdcard_r 2015-08-17 19:25 FM Recording
drwxrwx--- root sdcard_r 2015-08-24 17:18 Flash Share
drwxrwx--- root sdcard_r 2015-08-24 10:03 KingMaster
drwxrwx--- root sdcard_r 2015-08-14 04:39 Kingroot
drwxrwx--- root sdcard_r 2015-08-21 06:49 ManifestViewer
drwxrwx--- root sdcard_r 2015-08-30 19:25 Movies
drwxrwx--- root sdcard_r 2015-08-30 19:25 Music
drwxrwx--- root sdcard_r 2015-08-13 06:55 OGWhatsApp
drwxrwx--- root sdcard_r 2015-08-23 14:00 OGWhatsApp Old
drwxrwx--- root sdcard_r 2015-08-11 17:00 Pictures
drwxrwx--- root sdcard_r 2015-08-23 10:59 Rec
drwxrwx--- root sdcard_r 2014-01-01 00:00 Ringtones
drwxrwx--- root sdcard_r 2015-08-24 17:18 ShareSDK
drwxrwx--- root sdcard_r 2015-08-21 14:41 Simple Android Server
drwxrwx--- root sdcard_r 2015-08-23 11:19 VidMate
drwxrwx--- root sdcard_r 2015-08-14 04:00 WhatsApp
drwxrwx--- root sdcard_r 2015-08-30 14:55 Wps
drwxrwx--- root sdcard_r 2015-08-30 17:19 bluetooth
drwxrwx--- root sdcard_r 2015-08-24 15:11 com.facebook.orca
-rw-rw---- root sdcard_r 2999645 2015-08-30 14:55 demo.mp4
drwxrwx--- root sdcard_r 2015-08-29 17:11 dianxin
drwxrwx--- root sdcard_r 2015-08-29 21:29 documents
-rw-rw---- root sdcard_r 112 2015-08-15 07:41 e_config
drwxrwx--- root sdcard_r 2015-08-18 07:00 iQuran
drwxrwx--- root sdcard_r 2015-08-23 14:00 icloudzone
drwxrwx--- root sdcard_r 2015-08-14 11:53 jamb_cbt_science
-rw-rw---- root sdcard_r 112 2015-08-13 20:24 kr-stock-conf
drwxrwx--- root sdcard_r 2015-08-11 17:45 media
drwxrwx--- root sdcard_r 2015-08-23 14:00 mtklog
drwxrwx--- root sdcard_r 2014-01-01 01:00 obb
-rw-rw---- root sdcard_r 1132508 2015-08-14 11:54 pq_commercial.pdf
-rw-rw---- root sdcard_r 6 2015-08-23 13:44 qs.pid
drwxrwx--- root sdcard_r 2015-08-16 07:33 romtoolbox
drwxrwx--- root sdcard_r 2015-08-24 10:03 tbslog
drwxrwx--- root sdcard_r 2015-08-17 04:25 tencent
-rw-rw---- root sdcard_r 69565980 2015-08-23 17:01 update.zip
drwxrwx--- root sdcard_r 2015-08-14 22:26 viber
-rw-rw---- root sdcard_r 8514230 2015-08-30 10:43 vlc.apk
u0_a192@Infinix_X507:/ $
我已经看到类似的解决方案,但在 php 中使用 ftp_rawlist() 函数,但我想要一个 Java / Android 解决方案。 ...
我知道这需要 RegEx 或 Pattern...等等。
非常感谢您的帮助
你让这件事变得比需要的更难; Android 有一个 File
class 内置了这个功能:
File f = new File(path);
File files[] = f.listFiles();
这将为您提供该路径中的一组文件和文件夹。有关 File
的文档可在此处找到:
http://www.developer.android.com/reference/java/io/File.html
您要解析哪些数据?如果您要查找特定字符串,可以使用 grep。 (至少,在 Linux 上你可以使用 grep,我假设它也包含在 Android 中,但我自己还没有尝试过。)
ls -l | grep targetString
首先,你read the output line by line.
那你split each line by whitespaces:
if (str[0] == 'd') // Directory
String[] parsed = str.split("\s+", 6);
else
String[] parsed = str.split("\s+", 7);
然后你有一个很好的字符串数组,其中 parsed[6]
是文件名,或者 parsed[5]
如果它是一个目录,因为 ls -l
不会打印目录的大小。它不会将文件名与内部空格混淆,作为额外的好处。
关于如何解析返回的结果,我真的需要帮助 “ls -l”命令 在用户被授予 su 访问权限
之后,我真的需要它来获取我的文件管理器应用程序中私人目录(例如“/data/data”目录)的列表和详细信息下面是执行命令后预期返回的结果示例 getRunTime().exec("ls -l /data/data");
> u0_a192@Infinix_X507:/ $ ls -l /storage/sdcard0
drwxrwx--- root sdcard_r 2015-08-14 22:23 2go
drwxrwx--- root sdcard_r 2015-08-15 11:26 360
drwxrwx--x root sdcard_r 2015-08-13 10:25 Android
drwxrwx--- root sdcard_r 2015-08-29 21:09 AppProjects
drwxrwx--- root sdcard_r 2014-01-01 00:00 Assistant
drwxrwx--- root sdcard_r 2015-08-18 10:44 Camera360
drwxrwx--- root sdcard_r 2015-08-11 21:29 DCIM
-rw-rw---- root sdcard_r 808 2015-08-19 05:36 Document.txt
drwxrwx--- root sdcard_r 2015-08-30 07:19 Download
drwxrwx--- root sdcard_r 2015-08-17 19:25 FM Recording
drwxrwx--- root sdcard_r 2015-08-24 17:18 Flash Share
drwxrwx--- root sdcard_r 2015-08-24 10:03 KingMaster
drwxrwx--- root sdcard_r 2015-08-14 04:39 Kingroot
drwxrwx--- root sdcard_r 2015-08-21 06:49 ManifestViewer
drwxrwx--- root sdcard_r 2015-08-30 19:25 Movies
drwxrwx--- root sdcard_r 2015-08-30 19:25 Music
drwxrwx--- root sdcard_r 2015-08-13 06:55 OGWhatsApp
drwxrwx--- root sdcard_r 2015-08-23 14:00 OGWhatsApp Old
drwxrwx--- root sdcard_r 2015-08-11 17:00 Pictures
drwxrwx--- root sdcard_r 2015-08-23 10:59 Rec
drwxrwx--- root sdcard_r 2014-01-01 00:00 Ringtones
drwxrwx--- root sdcard_r 2015-08-24 17:18 ShareSDK
drwxrwx--- root sdcard_r 2015-08-21 14:41 Simple Android Server
drwxrwx--- root sdcard_r 2015-08-23 11:19 VidMate
drwxrwx--- root sdcard_r 2015-08-14 04:00 WhatsApp
drwxrwx--- root sdcard_r 2015-08-30 14:55 Wps
drwxrwx--- root sdcard_r 2015-08-30 17:19 bluetooth
drwxrwx--- root sdcard_r 2015-08-24 15:11 com.facebook.orca
-rw-rw---- root sdcard_r 2999645 2015-08-30 14:55 demo.mp4
drwxrwx--- root sdcard_r 2015-08-29 17:11 dianxin
drwxrwx--- root sdcard_r 2015-08-29 21:29 documents
-rw-rw---- root sdcard_r 112 2015-08-15 07:41 e_config
drwxrwx--- root sdcard_r 2015-08-18 07:00 iQuran
drwxrwx--- root sdcard_r 2015-08-23 14:00 icloudzone
drwxrwx--- root sdcard_r 2015-08-14 11:53 jamb_cbt_science
-rw-rw---- root sdcard_r 112 2015-08-13 20:24 kr-stock-conf
drwxrwx--- root sdcard_r 2015-08-11 17:45 media
drwxrwx--- root sdcard_r 2015-08-23 14:00 mtklog
drwxrwx--- root sdcard_r 2014-01-01 01:00 obb
-rw-rw---- root sdcard_r 1132508 2015-08-14 11:54 pq_commercial.pdf
-rw-rw---- root sdcard_r 6 2015-08-23 13:44 qs.pid
drwxrwx--- root sdcard_r 2015-08-16 07:33 romtoolbox
drwxrwx--- root sdcard_r 2015-08-24 10:03 tbslog
drwxrwx--- root sdcard_r 2015-08-17 04:25 tencent
-rw-rw---- root sdcard_r 69565980 2015-08-23 17:01 update.zip
drwxrwx--- root sdcard_r 2015-08-14 22:26 viber
-rw-rw---- root sdcard_r 8514230 2015-08-30 10:43 vlc.apk
u0_a192@Infinix_X507:/ $
我已经看到类似的解决方案,但在 php 中使用 ftp_rawlist() 函数,但我想要一个 Java / Android 解决方案。 ...
我知道这需要 RegEx 或 Pattern...等等。 非常感谢您的帮助
你让这件事变得比需要的更难; Android 有一个 File
class 内置了这个功能:
File f = new File(path);
File files[] = f.listFiles();
这将为您提供该路径中的一组文件和文件夹。有关 File
的文档可在此处找到:
http://www.developer.android.com/reference/java/io/File.html
您要解析哪些数据?如果您要查找特定字符串,可以使用 grep。 (至少,在 Linux 上你可以使用 grep,我假设它也包含在 Android 中,但我自己还没有尝试过。)
ls -l | grep targetString
首先,你read the output line by line.
那你split each line by whitespaces:
if (str[0] == 'd') // Directory
String[] parsed = str.split("\s+", 6);
else
String[] parsed = str.split("\s+", 7);
然后你有一个很好的字符串数组,其中 parsed[6]
是文件名,或者 parsed[5]
如果它是一个目录,因为 ls -l
不会打印目录的大小。它不会将文件名与内部空格混淆,作为额外的好处。