2014-10-20 2 views
1

Я пытаюсь создать программу, которая будет запускаться из терминала или командной строки. Вам нужно указать имя файла в аргументах. Я хочу, чтобы он мог получить путь, в котором была запущена программа, а затем добавить к нему имя файла. Было бы что-то вроде этого:Получить путь при запуске из терминала или командной строки

public static void main(String[] args) { 
    Scanner scanner = new Scanner(System.in); 
    if (args.length > 0) { 
     if (args[0] instanceof String && !args[0].equals(null)) { 
      if (args[0].equals("compile")) { 
       System.out.println("File to compile:"); 
       String fileName = scanner.next(); 
       String path = /*get the path here*/ + fileName; 
       File textfile = new File(path); 
       if (textfile.exists()) { 
        Compiler compiler = new Compiler(textfile); 
        compiler.compile(); 
       } else { 
        System.out.println("File doesn't exist"); 
       } 
      } 
     } 
    } 
} 
+1

Если имя файла не начинается с «: //» или «/» (для Windows и Unix соответственно), Java автоматически будет использовать относительные пути. – MrHug

ответ

1

Это должно работать для вас:

Paths.get("").toAbsolutePath().toString() 

Вы можете проверить с помощью:

System.out.println("" + Paths.get("").toAbsolutePath().toString()); 
+0

Извините, если я не объяснил это достаточно хорошо, но я хочу, чтобы получить путь, если какой-либо конечный пользователь запускает его из любого каталога. Мне нужно иметь возможность получить, где у пользователя есть cd, когда программа была запущена через терминал/cmd. – epicsharp

+0

Хорошо, я отредактировал мой пост, он должен сработать для вас. – brso05

0

Если я вас правильно понял вы пытаетесь получить путь, где находится программа.

если так что вы можете попробовать следующее:

URI path = new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath().toURI()); 
1

Попробуйте это:

String path = System.getProperty("user.dir") + "/" + fileName; 
+1

Но имейте в виду, что путь может быть задан абсолютным (например, '/ bla/bla & filename') – Oncaphillis

0

Замена /*get the path here*/ с Paths.get(".") должны получить, что вы хотите. Если ваш аргумент является именем файла в том же каталоге, вам не нужно указывать путь к нему для создания объекта File.

Так что в вашем случае,

File textfile = new File(fileName); 

должны работать.

Смежные вопросы