Я хочу получить доступ к моему текущему рабочему каталогу, используя Java.
Мой код:
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);
Вывод:
Current dir: C:\WINDOWS\system32
Current dir using System: C:\WINDOWS\system32
Мой вывод неверен, потому что диск C не является моим текущим каталогом.
Как получить текущий каталог?
cd
команду в командной строке, когда вы выполняете это?Ответы:
Это напечатает полный абсолютный путь от того места, где было инициализировано ваше приложение.
Из документации :
java.io
Пакет разрешает относительные пути, используя текущий каталог пользователя. Текущий каталог представлен как системное свойство, то естьuser.dir
и является каталогом, из которого была вызвана JVM.источник
Смотрите: http://docs.oracle.com/javase/tutorial/essential/io/pathOps.html
Используя
java.nio.file.Path
andjava.nio.file.Paths
, вы можете сделать следующее, чтобы показать, что Java считает вашим текущим путем. Это для 7 и далее, и использует NIO.Это выводит,
Current relative path is: /Users/george/NetBeansProjects/Tutorials
что в моем случае, где я запустил класс. Построение путей относительным образом, без использования начального разделителя для указания того, что вы строите абсолютный путь, будет использовать этот относительный путь в качестве начальной точки.источник
Paths.get("").getParent()
он даетnull
. Вместо этого работает:Paths.get("").toAbsolutePath().getParent()
.Следующее работает на Java 7 и выше (см. Здесь для документации).
источник
import java.io.File; File(".").getAbsolutePath()
?Paths.get()
может считаться лучше тем, что дает прямой доступ к более мощномуPath
интерфейсу..normalize()
в этом контексте?Returns a path that is this path with redundant name elements eliminated.
Это даст вам путь вашего текущего рабочего каталога:
И это даст вам путь к файлу с именем «Foo.txt» в рабочем каталоге:
Редактировать: чтобы получить абсолютный путь к текущему каталогу:
* Обновить * Чтобы получить текущий рабочий каталог:
источник
Path path = FileSystems.getDefault().getPath(".").toAbsolutePath();
Path
объект, указывающий на файл, вызываемый.
внутри текущего рабочего каталога . Используя пустую строку, а не"."
работал для меня.Это решение для меня
источник
new File("").getAbsoluteFile()
вместо этого./
при создании относительного пути. Я был неправ, не начинай с/
.../
также работает для перехода в дерево каталогов..
.Я нашел это решение в комментариях, которое лучше других и более переносимо:
Или даже
источник
Что заставляет вас думать, что c: \ windows \ system32 не является вашим текущим каталогом?
user.dir
Свойство явно быть «текущий рабочий каталог пользователя».Иными словами, если вы не запускаете Java из командной строки, c: \ windows \ system32, вероятно, является вашим CWD. То есть, если вы дважды щелкаете, чтобы запустить свою программу, CWD вряд ли будет каталогом, из которого вы дважды щелкнете.
Изменить : Похоже, что это верно только для старых версий Windows и / или Java.
источник
user.dir
это папка, в которой я дважды щелкнул файл jar.Использование
CodeSource#getLocation()
.Это прекрасно работает и в JAR-файлах. Вы можете получить
CodeSource
,ProtectionDomain#getCodeSource()
аProtectionDomain
в свою очередь можно получитьClass#getProtectionDomain()
.источник
источник
""
если приложение выполняется из файла JAR или элемента CLASSPATH. Не то, что просили.getClass()
- это объектный метод, поэтому в статическом контексте просто удалениеthis
не работает. Вы должны были бы явно обратиться к классу, в котором вы находитесь, делаяMyClass.class.getClassLoader().....
.как правило, как объект File:
Вы можете захотеть иметь полную квалифицированную строку, такую как "D: / a / b / c", выполняя:
источник
Я использую Linux и получаю одинаковый результат для обоих этих подходов:
Paths.get("")
документыSystem.getProperty("user.dir")
документыисточник
В Linux, когда вы запускаете файл jar из терминала , они оба возвращают одно и то же
String
: "/ home / CurrentUser" , независимо от того, где находится файл jar. Это зависит только от того, какой текущий каталог вы используете со своим терминалом, когда вы запускаете файл JAR.Если ваш
Class
сmain
будет называтьсяMainClass
, то попробуйте:Это будет возвращать
String
с абсолютным путем в банке файла.источник
При использовании Windows user.dir возвращает каталог, как и ожидалось, но НЕ при запуске приложения с повышенными правами (запуск от имени администратора), в этом случае вы получаете C: \ WINDOWS \ system32
источник
Я надеюсь, что вы хотите получить доступ к текущему каталогу, включая пакет, т. Е. Если ваша Java-программа включена
c:\myApp\com\foo\src\service\MyTest.java
и вы хотите печатать до этогоc:\myApp\com\foo\src\service
момента, вы можете попробовать следующий код:Примечание. Этот код тестируется только в Windows с Oracle JRE.
источник
File.separator
взамен конструктор с несколькими аргументамиFile
); 3. classpath указывается в командной строке, а «текущий каталог, включающий пакет» (??): a. указано первым, б. указано абсолютно, c. точно соответствует CWD (даже с учетом регистра Windows), и d. является потомком CWDСтоит упомянуть, что это только проверено,
Windows
но я думаю, что оно отлично работает на других операционных системах [Linux,MacOs,Solaris
] :).У меня было 2
.jar
файла в одном каталоге. Я хотел из одного.jar
файла запустить другой.jar
файл, который находится в том же каталоге.Проблема в том, что при запуске его из
cmd
текущего каталога естьsystem32
.;][[;'57f2g34g87-8+9-09!2#@!$%^^&()
или()%&$%^@#
он работает хорошо.ProcessBuilder
с ниже следующим:🍂 ..
🍂
getBasePathForClass(Class<?> classs)
:источник
Текущий рабочий каталог определяется по-разному в разных реализациях Java. Для определенной версии до Java 7 не было последовательного способа получить рабочий каталог. Вы можете обойти это, запустив Java-файл
-D
и определив переменную для хранения информации.Что-то вроде
Это не совсем верно, но вы поняли идею. Тогда
System.getProperty("com.mycompany.workingDir")
...источник
Предположим, что вы пытаетесь запустить свой проект в затмении, или netbean, или в одиночку из командной строки. Я должен написать метод, чтобы исправить это
Чтобы использовать, везде, где вы хотите получить базовый путь для чтения файла, вы можете передать свой якорный класс вышеуказанному методу, результат может быть тем, что вам нужно: D
Лучший,
источник
Ни один из ответов, опубликованных здесь, не работал для меня. Вот что сработало:
Изменить: окончательная версия в моем коде:
источник
Это моя серебряная пуля, когда в нее впадает момент смятения. (Назовите это первым делом в главном). Может быть, например, JVM добавлена в IDE для другой версии. Эта статическая функция ищет PID текущего процесса и открывает VisualVM для этого pid. Путаница тут же прекращается, потому что вы хотите всего этого, и вы получите это ...
источник
System.getProperty("java.class.path")
источник
это имя текущего каталога
это текущий путь к каталогу
источник