如何从java运行unix命令

问题描述 投票:2回答:3

我想从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命令,我们可以使文件操作更容易。

android
3个回答
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
投票

在Android上没有wc。

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

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


0
投票

你可以试试grep

以下命令:

$ wc -l filename

输出相当于:

$ grep -c '.*' filename

表达式.*表示除了换行零次或多次之外的任何字符,它适用于每种可能大小的行。

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

PS:你可以在https://regexr.com/上玩和调试正则表达式

© www.soinside.com 2019 - 2024. All rights reserved.