Получение текущего рабочего каталога в Java - PullRequest
910 голосов
/ 02 февраля 2011

Я хочу получить доступ к своему текущему рабочему каталогу, используя

 String current = new java.io.File( "." ).getCanonicalPath();
        System.out.println("Current dir:"+current);
 String currentDir = System.getProperty("user.dir");
        System.out.println("Current dir using System:" +currentDir);

OutPut:

Current dir: C:\WINDOWS\system32
Current dir using System: C:\WINDOWS\system32

Мой вывод неверен, поскольку диск C не является моим текущим каталогом.Нужна помощь в этом отношении.

Ответы [ 20 ]

1045 голосов
/ 30 сентября 2011
public class JavaApplication1 {
  public static void main(String[] args) {
       System.out.println("Working Directory = " +
              System.getProperty("user.dir"));
  }
}

Это напечатает полный абсолютный путь от того места, где было инициализировано ваше приложение.

346 голосов
/ 11 апреля 2013

См .: http://docs.oracle.com/javase/tutorial/essential/io/pathOps.html

Используя java.nio.file.Path и java.nio.file.Paths, вы можете сделать следующее, чтобы показать, что Java считает вашим текущим путем. Это для 7 и далее, и использует NIO.

Path currentRelativePath = Paths.get("");
String s = currentRelativePath.toAbsolutePath().toString();
System.out.println("Current relative path is: " + s);

Это выводит Current relative path is: /Users/george/NetBeansProjects/Tutorials, что в моем случае, где я запустил класс. Построение путей относительным образом, без использования начального разделителя для указания того, что вы строите абсолютный путь, будет использовать этот относительный путь в качестве начальной точки.

212 голосов
/ 12 марта 2014

Следующее работает на Java 7 и выше (см. здесь для документации).

import java.nio.file.Paths;

Paths.get(".").toAbsolutePath().normalize().toString();
54 голосов
/ 15 сентября 2017

Это даст вам путь к вашему текущему рабочему каталогу:

Path path = FileSystems.getDefault().getPath(".");

И это даст вам путь к файлу с именем "Foo.txt" в рабочем каталоге:

Path path = FileSystems.getDefault().getPath("Foo.txt");

Редактировать: Чтобы получить абсолютный путь к текущему каталогу:

Path path = FileSystems.getDefault().getPath(".").toAbsolutePath();
33 голосов
/ 29 мая 2013

Это решение для меня

File currentDir = new File("");
30 голосов
/ 02 февраля 2011

С чего вы взяли, что c: \ windows \ system32 не ваш текущий каталог? Свойство user.dir явно должно быть «текущим рабочим каталогом пользователя».

Другими словами, если вы не запускаете Java из командной строки, c: \ windows \ system32 , вероятно, ваш CWD. То есть, если вы дважды щелкнете, чтобы запустить вашу программу, CWD вряд ли будет каталогом, из которого вы дважды щелкнете.

Редактировать : Похоже, что это верно только для старых версий Windows и / или Java.

25 голосов
/ 22 января 2014

Использование CodeSource#getLocation().

Это прекрасно работает и в JAR-файлах.Вы можете получить CodeSource по ProtectionDomain#getCodeSource(), а ProtectionDomain по очереди можно получить по Class#getProtectionDomain().

public class Test {
    public static void main(String... args) throws Exception {
        URL location = Test.class.getProtectionDomain().getCodeSource().getLocation();
        System.out.println(location.getFile());
    }
}
24 голосов
/ 25 июня 2018

Я нашел это решение в комментариях, которое лучше других и более переносимо:

String cwd = new File("").getAbsolutePath();
23 голосов
/ 15 мая 2013
this.getClass().getClassLoader().getResource("").getPath()
17 голосов
/ 26 января 2015

как правило, в качестве объекта File:

File getCwd() {
  return new File("").getAbsoluteFile();
}

вы можете захотеть иметь полную строку, например, "D: / a / b / c", выполнив:

getCwd().getAbsolutePath()
...