2016-10-17 144 views
0

我想请点击此链接传递到Java中的文件: 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(); 
      } 
     } 
    } 
} 

感谢您的任何帮助。

+0

虽然我不完全了解你的问题,但也许你应该看看Apache Commons CLI:https://commons.apache.org/proper/commons-cli/ 另外,你不应该使用用方法和变量名称强调。 –

+2

传递或解析?他们是完全不同的东西。 – byxor

+0

解析一个通过args传递的文件,我认为这是正确的(?) - 好的,我正在看看那个链接,谢谢。谢谢你的提示 – Nihvel

回答

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 : 
} 
+0

哦,上帝,我没有想到这一点!从这里看来看起来非常简单。好吧,我会尝试这种方式,看看能否帮助我! – Nihvel

+0

好吧,我想它已经解决了!非常感谢! – Nihvel

0

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

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

并使用InputStream来操纵文件。

+0

我知道你不能发表评论,因为低于50分,但如果你阅读代码,我已经在使用这个代码。事情是,我需要从这个切换到破折号和字母:-f(例如)。 对不起,但你的回答没有帮助 – Nihvel

0

在第一种情况下,你有一样

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

而在第二种情况下

myApp.main(new String[] { "-s", "file2" }); 

如果您发现该参数混淆,我建议你使用调试器来看看该数组或打印出参数。

您可以使用switch在它们之间切换或使用几个if/else if语句。

+0

我不知道我是否理解正确,但阅读其他答案我想我误解了args []的含义。除此之外,我不知道在哪里使用你建议的代码(或者更好的,myApp.main我从未见过的符号)原谅我,我只需要java这个项目只有 – Nihvel

+0

@Nihvel代码告诉你什么当您运行上面的代码时,JVM会执行此操作。传递给你的字符串数组没有特别之处。您可以按照您已经在做的相同方式来检查它们,例如'switch'没什么特别的。目前尚不清楚混淆的地方在哪里。 –

+1

好吧,现在我明白了!感谢您的解释!它并没有完全帮助我,因为我不熟悉java。对我来说,一个证明奶奶的答案被更好地接受了。总之,明白了。谢谢! – Nihvel