从命令行解析作为参数传递给Java的文件

时间:2016-10-17 12:25:26

标签: java file args

我正在尝试关注此链接: Parsing arguments to a Java command line program

并在java中使用参数来解析某个文件。

我需要提供给应用程序的文件主要是2.让我们将它们称为file1和file2。

我希望我可以像以下一样调用java:

/usr/bin/java -jar myapplication.jar -f file1

/usr/bin/java -jar myapplication.jar -s file2

永远不会在同一时间。

在我发布的那个链接中,我无法理解如何将一个参数传递给void main。

我的代码在理解我需要-f -s格式的参数之前:

public class myApp {
    public static void main(String[] args) throws IOException, JAXBException, SQLException {
        Database db = new Database();
        if ( args.length == 0 ) {
            System.out.println("No arguments were given.\n");
            db.disconnect();
        }
        else {
            System.out.println("Got the argument.\n");
            File file = new File(args[0]);
            String namefile = file.getName();

            switch (namefile.substring(0, 6)) {
                case "FILE01":
                    System.out.println("Processing file type FILE01: "+namefile);
                    Process_filezeroone program_zeroone = new Process_filezeroone();
                    program_zeroone.process(file, namefile);
                    break;
                case "FILE02":
                    System.out.println("Processing file type FILE02: "+namefile);
                    Process_filezerotwo program_zerotwo = new Process_filezerotwo();
                    program_zerotwo.process(file, namefile);
                    break;
                default:
                    System.out.println("Skipping: "+namefile);
                    db.disconnect();
            }
        }
    }
}

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

只需对第一个参数(-f / -s)执行切换操作。

File file;
switch(args[0]){
    case "-f" : 
        file = new File(args[1]);
        //do stuff with file1
        break;
    case "-s" : 
        file = new File(args[1]);
        //do stuff with file2
        break;
    default :
}

答案 1 :(得分:0)

这很简单。只需使用java.io.File api来实现它。

File f = new File(args[0]);

并使用InputStream来操作文件。

答案 2 :(得分:0)

在第一种情况下,您与

相同
            Expression<Func<string, bool>> exp = x => x.Contains("b");
            Expression<Func<string, bool>> exp2 = x => x.Contains("a");
            ParameterExpression param = exp.Parameters[0];
            Expression<Func<string, bool>> accumulator = Expression.Lambda<Func<string, bool>>(Expression.AndAlso(exp.Body, Expression.Invoke(exp2, param)), param);
            var flag = accumulator.Compile()("ab");
            Console.WriteLine(flag);

在第二种情况下

myApp.main(new String[] { "-f", "file1" });

如果您发现参数混乱,我建议您使用调试器查看数组或打印参数。

您可以使用myApp.main(new String[] { "-s", "file2" }); 在它们之间切换,也可以使用几个switch / if语句。