如何编写访问系统的方法?

时间:2014-09-24 00:54:43

标签: java processbuilder

我的程序几乎正常工作,但我主要的第二个数组并没有显示任何内容。我无法弄清楚原因。这是我的代码。

package myutilites;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Map;
import java.util.Scanner;
import java.util.StringTokenizer;

public class extraCredit
{
public static void main(String args [])
{
     ArrayList<String> array = system("ls -l");
     for(String s: array)
        System.out.println(s);

     ArrayList<String> array1 = system("ls -l *.java");
     for(String a: array1)
      System.out.println(a);
}

public static ArrayList<String> system(String string)
    {
            ArrayList<String> array = new ArrayList<String>();
            ArrayList<String> infoArray = new ArrayList<String>();
            String s = string;
            StringTokenizer tok = new StringTokenizer(s,"\\,: ");
            while(tok.hasMoreTokens())
            {
                    array.add(tok.nextToken());
            }
            for (String a : array)
                    System.out.println(a);

            try
            {
                    ProcessBuilder pb = new ProcessBuilder(array);
                    Map<String, String> env = pb.environment();
                    env.put("VAR1", "myValue");
                    env.remove("OTHERVAR");
                    env.put("VAR2", env.get("VAR1") + "suffix");
                    pb.directory();
                    Process p = pb.start();


                    Scanner c = new Scanner(p.getInputStream());
                    while(c.hasNext())
                    {
                            infoArray.add(c.nextLine());
                    }
                    c.close();

            } catch (IOException e) {}
            return infoArray;
 }
}

我的输出就是这个。 ls -l * .java不起作用。

ls
-l
total 0
drwxr-xr-x   8 brianhammons  staff  272 Sep 10 09:44 bin
drwxr-xr-x  10 brianhammons  staff  340 Sep  9 10:04 src
ls
-l
*.java

3 个答案:

答案 0 :(得分:0)

除非您在包含Java源代码的目录中,否则您的输入字符串“ls -l <​​em> .java”将不会返回任何内容。事实上,它正在寻找一个无法找到的目录“ .java”。您需要将完整路径传递到系统函数

答案 1 :(得分:0)

这取决于你想要做什么。如果要在系统上找到每个* .java文件,请使用:&#34; locate * .java&#34;。 这将使用&#34; java&#34;找到文件或目录的每个实例。在名称中包含源代码和系统文件。使用&#34; locate --help&#34;查找与locate命令一起使用的选项列表。

如果您只想找到源代码,那么您需要遍历目录结构,寻找您的源目录(通常是src),然后提取文件。

如果您只想搜索某个特定目录,则必须使用以下命令:&#34; cd&#34;。 EG cd / home / michael / Java。

学习一些基本的Bash命令会很有帮助。最好的资源之一是http://bash.cyberciti.biz/guide/Main_Page。 如果您可以更具体地了解您的目标,我将很乐意为您提供帮助

答案 2 :(得分:0)

我喜欢用Java来做系统工作(我知道,这有点奇怪,但那只是我)。但是,在您的情况下,我强烈建议不要将它用于此任务。

Java已经具备通过File,Path和FileSystem接口访问文件系统详细信息的出色能力。除非你真的需要真正具有异国情调的东西,否则你通过这些界面获得的结果会比你自己手工解析和整理的结果更好。