在Java中创建命令行Shell:初学者帮助

时间:2011-01-24 02:40:38

标签: java shell command-line

我似乎无法弄清楚的三个问题。

1)我想创建一个使用processbuilder的新进程来使它成为cat C:\ xxx \ xxx.java运行java文件,但我似乎无法实现它。

2)尝试编译时,我的数组出错了

3)当我分别键入“清除”和“退出”时,我无法找出一个清除屏幕或关闭窗口的方法。 system.exit(O)似乎只关闭虚拟机而不是实际关闭窗口。

这是我的代码,我很抱歉是个傻瓜,但我需要完成这件事,我没有人要问!

import java.io.*;

public class SimpleShell
{

    public class JavaStringHistory
        {
            private String[] history = new String[4];
        }

    public static void main(String[] args) throws
            java.io.IOException {

        String commandLine;
        BufferedReader console = new BufferedReader
            (new InputStreamReader(System.in));



            //Break with Ctrl+C
            while (true) {
            //read the command
            System.out.print("shell>");
            commandLine = console.readLine();

            //if just a return, loop
            if (commandLine.equals(""))
            continue;
            //history
            if(commandLine.equals('*'))
            {
              //new class HistoryStringArray();
             // {
               //   history[4] = history[3]
                //  history[3] = history[2]
                //  history[2] = history[1]
                //  history[1] = history[0]
                //  history[0] = commandLine
                }
            //help command
            if (commandLine.equals("help"))
            {
                System.out.println();
                System.out.println();
                System.out.println("Welcome to the shell");
                System.out.println("Written by: Brett Salmiery");
                System.out.println("CIS 390   -  Dr. Guzide");
                System.out.println("--------------------");
                System.out.println();
                System.out.println("Commands to use:");
                System.out.println("1) cat prog.java");
                System.out.println("2) exit");
                System.out.println("3) clear");
                System.out.println();
                System.out.println();
                System.out.println("---------------------");
                System.out.println();
            }

            if (commandLine.equals("clear"))
            {

               if ( int cls = 0; cls < 10; cls++ )
               {
                System.out.print();
               }


            }

            if (commandLine.endsWith(".java"))
            {
              if(commandLine.startsWith("cat"))
              {
                System.out.println("test");
                ProcessBuilder pb = new ProcessBuilder();
                //pb = new ProcessBuilder(commandLine);
              }

              else
              {
                  System.out.println("Incorrect Command");
              }
            }

            if (commandLine.equals("exit"))
            {

                System.out.println("...Terminating the Virtual Machine");
                System.out.println("...Done");
                System.out.println("Please Close manually with Options > Close");
                System.exit(0);
            }




        }
    }
}

1 个答案:

答案 0 :(得分:1)

           if ( int cls = 0; cls < 10; cls++ )

我认为你的意思是for:)

至于历史机制:你有一个类JavaStringHistory,它只有一个私有成员(不是一个糟糕的开始),但是没有方法可以在历史记录中添加条目或从历史记录中检索条目。所以你应该写那些方法。 (您也可以将成员公开并直接存储到已注释掉的代码中,但是您已经有了一个类,也可以完成抽象。)

至于ProcessBuilder,我不知道它是如何工作的。我不确定你想用它做什么,但是你可以使用FileReader类来读取列出的源文件并将其打印到终端。 (我可能还建议尝试使用String.split方法来拉开输入字符串并单独查看每个部分。)

关闭终端窗口?呃。不知道那里。大多数教授都愿意认识到有时候特定环境会发生愚蠢的事情。

希望这有助于您入门。