Java args命令行参数 - 尝试将文件名作为args中的参数传递给方法但不起作用

时间:2012-01-26 16:18:22

标签: java command-line-arguments

我对Java很新。目前尝试将args []中给出的文件名传递给此FileReader,但是当我编译它时,它说找不到指定的文件。如果我硬编码文件名,它工作正常。这应该是怎么回事?

public class StringSplit
{

   public void parseCommands
   {
     try
     {
       //not working, why? It works if I do FileReader fr= new FileReader("hi.tpl").
       FileReader fr= new FileReader(args);

     }

 public static void main (String[] args)// args holds the filename to be given to FileReader
 {
  if (args.length==0)
   {
     System.out.println("Error: Bad command or filename. Syntax: java [filename.tpl]);
     System.exit(0)
   }
   StringSplit ss= new StringSplit();
   ss.parseCommands();
  }

}

3 个答案:

答案 0 :(得分:5)

您只是开始使用伪代码,但从根本上说,您需要了解Java中不同类型的变量。

args中的{p> main参数 - 它是该方法的本地参数。如果您希望其他方法能够使用其值,则需要将该值存储在共享变量(例如静态或实例变量)中,或者您需要将其作为参数传递给需要它的方法。

例如:

public class StringSplit
{
  public void parseCommands(String[] files)
  {
    try
    {
      FileReader fr= new FileReader(files[0]);

    }
    // Rest of code
 }

 public static void main (String[] args)
 {
    if (args.length==0)
    {
      System.out.println("...");
      System.exit(0)
    }
    StringSplit ss= new StringSplit();
    ss.parseCommands(args);
  }
}

(目前您还可以使parseCommands成为静态方法,然后在不创建StringSplit实例的情况下调用它,顺便说一句......)

答案 1 :(得分:1)

您的args参数对parseCommands不可见。

Plus args是一个数组。您可能希望将该数组中的第一个元素发送到parseCommands。

public void parseCommands(String fileName)
   {
     try
     {
       //not working, why? It works if I do FileReader fr= new FileReader("hi.tpl").
       FileReader fr= new FileReader(fileName);

     }
  }

public static void main (String[] args)// args holds the filename to be given to FileReader
 {
  if (args.length==0)
   {
     System.out.println("Error: Bad command or filename. Syntax: java [filename.tpl]);
     System.exit(0)
   }
   StringSplit ss= new StringSplit();
   ss.parseCommands(args[0]);
  }

答案 2 :(得分:0)

首先,如果您已经在对象中,则不需要创建一个对象来调用函数。其次,将args作为参数传递给split函数。