如何在java中使用现有的unix库

如何在java中使用现有的unix库,java,linux,unix,Java,Linux,Unix,我在我的应用程序中使用了以下代码,没有任何问题 inputstream = Runtime.getRuntime().exec("/system/bootmenu/recovery/sbin/tune2fs -l /data.img").getInputStream(); 然而,最近tune2fs可执行文件被tune2fs库取代。我不能再让这个代码工作了 我试过: inputstream = Runtime.getRuntime().exec("/system/bootmenu/recover

我在我的应用程序中使用了以下代码,没有任何问题

inputstream = Runtime.getRuntime().exec("/system/bootmenu/recovery/sbin/tune2fs -l /data.img").getInputStream();
然而,最近tune2fs可执行文件被tune2fs库取代。我不能再让这个代码工作了

我试过:

inputstream = Runtime.getRuntime().exec("/system/bootmenu/recovery/sbin/tune2fs -l data.img",new String[]{"LD_LIBRARY_PATH=/system/bootmenu/recovery/sbin:$LD_LIBRARY_PATH"}).getInputStream();
但是如果没有成功,我该如何解决这个问题呢?

我建议使用而不是
运行时

ProcessBuilder pb = new ProcessBuilder("/system/bootmenu/recovery/sbin/tune2fs", "-l", "data.img");
Map<String, String> env = pb.environment();
env.put("LD_LIBRARY_PATH", "/system/bootmenu/recovery/sbin:" + env.get("LD_LIBRARY_PATH"));
pb.directory(new File("/mnt/sdcard/multiboot/MIUI/"));
Process p = pb.start();
ProcessBuilder pb=newprocessbuilder(“/system/bootmenu/recovery/sbin/tune2fs”、“-l”、“data.img”);
Map env=pb.environment();
环境put(“LD_LIBRARY_PATH”,“/system/bootmenu/recovery/sbin:”+env.get(“LD_LIBRARY_PATH”);
pb.directory(新文件(“/mnt/sdcard/multiboot/MIUI/”);
进程p=pb.start();

我认为$LD\u LIBRARY\u路径无法解决。您需要从当前环境中获取LD_LIBRARY_PATH并将其追加。这是因为“初始值是当前进程环境的副本(请参见System.getenv())。”我得到
类型ProcessBuilder中的方法目录(文件)不适用于
pb.directory中的参数(字符串)
(“/mnt/sdcard/multiboot/MIUI/”;
更新了答案,您似乎正在使用JDK 6+。其他语法适用于以前的版本。两种猜测:(1)可以访问该命令的操作系统用户与运行JVM的用户不同。(2)使用完整路径代替
工作目录
/mnt/sdcard/multiboot/MIUI/data.img