如何在java中的相同输入字符串中接受命令和文件名?

时间:2014-03-28 10:54:45

标签: java string arguments

基本上这就是我的输入:

C:> ltf sample.txt

然后Shell v2.0(程序)在C盘中创建一个sample.txt文件。

我已经探索了split()函数,但我必须从存储在我的数组中的命令验证我的输入。所以我需要"存储"我的数组中的文件名也是如此。我知道这并不合理,因为文件名会有所不同。基本上我要问的是,我如何一起接受命令和文件名?这是我目前的代码,只是为了让您了解我正在尝试做什么

package assignment311;
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
import java.util.*;
import javax.swing.JOptionPane;


public class assignment {

/*Data Members*/
    public static String[] myData;
    public static String CurrentPath;


/*Methods*/
public assignment()
{
        myData=new String[13];
        myData[0]="ls";
        myData[1]="ls -la";
        myData[2]="less";   
        myData[3]="gd";
        myData[4]="md";
        myData[5]="rnd";
        myData[6]="del";
        myData[7]="hd";
        myData[8]="uhd";
        myData[9]="ltf";
        myData[10]="nbc";
        myData[11]="gdb ";
        myData[12]="Tedit";

//initialise currentpath
CurrentPath="C:/";

}
public static void main(String[] args)
{



//initialise data by constructing an object of class

assignment obj=new assignment();
String userInput="";

do
{
//while
//get user input

System.out.print(" "+CurrentPath+"> ");
Scanner scan=new Scanner(System.in);
userInput=scan.nextLine();
String[] stringarray = userInput.split(" ");



/// boolean variable to display information about command validity
boolean isFound=false;

for(int j=0;j<myData.length;j++)
{
if(userInput.equals(myData[j]))
{
    isFound=true;
    if(stringarray[0].equals("ls"))
    {
        obj.Run_Ls();
    }

        if(stringarray[0].equals("gd"))
        {
            //ask user to enter a folder name
            System.out.println("enter a valid folder name");

            //get input

            String fdname=scan.nextLine();

            //get all folders name
            File myfile=new File(CurrentPath);
            String[] allfiles=myfile.list();

            // match user input with folder names
            boolean isdirthere=false;
            for(int k=0;k<allfiles.length;k++)
            {

                if(fdname.equals(allfiles[k]))
                {
                    CurrentPath=CurrentPath+"/"+allfiles[k];

                    isdirthere=true;
                }

            }
                    if(!isdirthere)
                    {
                    System.out.println("Invalid Folder Name");
                    }

            }
        if(userInput.equals("ltf"))
        {
            System.out.println("Enter valid file name");
            String filename=scan.nextLine();
            final Formatter x;
            try 
            {
                x = new Formatter(filename);
                System.out.println("File Created");
            }
            catch (Exception e)
            {
                System.out.println("Error man");
            }




         }
        if(userInput.equals("nbc"))
        {

        }
        }


}


if(!isFound)
{
System.out.println("Invalid Command");
}

// scan.close();
//end of while


}

while(!userInput.equals("exit"));

}

public void Run_Ls()
{
File obj=new File(CurrentPath);
String[] ls_result=obj.list();

for(int i=0;i<ls_result.length;i++)
{
System.out.println(ls_result[i]);
}
}

}

2 个答案:

答案 0 :(得分:0)

而不是存储简单字符串,存储列表或字符串数​​组:

String[][] myData = {
    {"ls"},
    {"ls", "-la"}
};

这样,您可以保留命令的结构(即命令名称和所有参数),而无需猜测那里的空间可能意味着什么。

答案 1 :(得分:0)

您需要在同一行上输入命令和文件名。您可以尝试使用userInput.startsWith而不是检查userInput.equals,当您的输入以与myData数组匹配的命令开始时,这将返回true。

您可能会遇到两个命令具有相同起始字母的问题,如:

myData的[0] = “LS”;  myData [1] =“ls -la”;

您可以将上述内容更改为:

myData[0]="ls -la";
myData[1]="ls ";

找到与列表匹配的命令后,可以执行子字符串

String fileName = userInput.subString(myData[x].length).trim();

对于字符串“cmd”,上述操作仅返回。 这将为您提供不必担心不同文件格式的灵活性。 您可能需要在fileName变量中添加一些验证。