如何从java运行unix命令

时间:2011-08-19 09:38:33

标签: android

我想从java代码中执行一些Unix命令。

我想从java代码运行logcat命令。

我使用以下代码执行此操作:

  Process p = Runtime.getRuntime().exec("logcat -v time -f /mnt/sdcard/abc.txt");

上面的代码工作正常。

我想运行其他一些Unix命令的方式相同。

我想运行“WC -l”(读取文件中的行数)命令,我希望将其存储在一些整数中。

以下是我为此编写的代码:

 Process p = Runtime.getRuntime().exec("wc -l /mnt/sdcard/abc.txt");

但它低于例外。

   08-19 05:34:53.457 W/System.err( 1269): java.io.IOException: Error running exec(). Command: [wc, -l, /mnt/sdcard/abc.txt] Working Directory: null Environment: null

   08-19 05:34:53.457 W/System.err( 1269):  at java.lang.ProcessManager.exec(ProcessManager.java:224)

   08-19 05:34:53.457 W/System.err( 1269):  at java.lang.Runtime.exec(Runtime.java:189)

   08-19 05:34:53.457 W/System.err( 1269):  at java.lang.Runtime.exec(Runtime.java:275)

   08-19 05:34:53.457 W/System.err( 1269):  at java.lang.Runtime.exec(Runtime.java:210)

请帮助我解决这个问题..

我在SD卡中有一个文件“abc.txt”。

是否可以从android的java代码执行“WC -l”命令。

如果我们可以从java代码执行Unix命令,我们可以使文件操作更容易。

3 个答案:

答案 0 :(得分:2)

这里android中的System / bin列表中没有“wc”抱歉

am                 check_prereq  dexopt       fsck_msdos    iftop     keystore_cli  mediaserver  netd         ps            rild       service         stagefright     toolbox
applypatch         chmod         df           gdbjithelper  ime       kill          mkdir        netstat      qemud         rm         servicemanager  start           top
applypatch_static  chown         dhcpcd       gdbserver     input     linker        monkey       newfs_msdos  qemu-props    rmdir      setconsole      stop            umount
app_process        cmp           dmesg        getevent      insmod    ln            mount        notify       racoon        rmmod      setprop         surfaceflinger  updater
audioloop          dalvikvm      dnsmasq      getprop       installd  log           mtpd         omx_tests    radiooptions  route      sh              svc             vdc
bmgr               date          dumpstate    gzip          ioctl     logcat        mv           ping         reboot        run-as     showlease       sync            vmstat
bootanimation      dbus-daemon   dumpsys      hd            ionice    logwrapper    nandread     pm           record        schedtest  skia_test       system_server   vold
bugreport          dd            dvz          id            iptables  ls            ndc          pppd         recovery      schedtop   sleep           tc              watchprops
cat                debuggerd     flash_image  ifconfig      keystore  lsmod         netcfg       printenv     renice        sendevent  smd             testid3         wipe

答案 1 :(得分:1)

在Android上没有wc。

dev:~ njzk2$ ./adb shell wc
wc: not found

但是,你可以考虑打开文件并计算那里的行数。

答案 2 :(得分:0)

您可以尝试 grep

以下命令:

$ wc -l filename

输出等效于:

$ grep -c '.*' filename

表达式.*表示除换行符零次或多次之外的任何字符,适用于各种尺寸的行。

相关: https://unix.stackexchange.com/q/25344

PS:您可以在https://regexr.com/上使用正则表达式并对其进行调试