Параметр командной строки Java args - попытка передать имя файла как параметр в args методу, но не работает - PullRequest
0 голосов
/ 26 января 2012

Я довольно новичок в 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 ]

5 голосов
/ 26 января 2012

Для начала вы дали только псевдокод, но в основном вам нужно узнать о различных типах переменных в Java.

args в 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 голос
/ 26 января 2012

Ваш параметр args невидим для parseCommands.

Плюс 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]);
  }
0 голосов
/ 26 января 2012

С одной стороны, вам не нужно создавать объект для вызова функции, если вы уже находитесь в объекте.Во-вторых, передайте аргументы в качестве параметра вашей функции разделения.

...