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

Lui*_*hil 0 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();
  }

}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

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

argsin 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);
  }
}
Run Code Online (Sandbox Code Playgroud)

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