Автор оригинала: mkyong.
В Java мы можем использовать System.getProperty("user.dir")
для получения текущего рабочего каталога, каталога, из которого была запущена ваша программа.
String dir = System.getProperty("user.dir"); // directory from where the program was launched // e.g /home/mkyong/projects/core-java/java-io System.out.println(dir);
Одна из хороших сторон этого системного свойства user.dir
мы можем легко переопределить системное свойство с помощью аргумента -D
, например:
java -Duser.dir=/home/mkyong/ -jar abc.jar
1. Рабочий каталог
В приведенной ниже программе показаны различные способы, такие как Файл
, Пути
, Файловые системы
или системное свойство для получения текущего рабочего каталога; все методы вернут один и тот же результат.
package com.mkyong.io.howto; import java.io.File; import java.nio.file.FileSystems; import java.nio.file.Paths; public class CurrentWorkingDirectory { public static void main(String[] args) { printCurrentWorkingDirectory1(); printCurrentWorkingDirectory2(); printCurrentWorkingDirectory3(); printCurrentWorkingDirectory4(); } // System Property private static void printCurrentWorkingDirectory1() { String userDirectory = System.getProperty("user.dir"); System.out.println(userDirectory); } // Path, Java 7 private static void printCurrentWorkingDirectory2() { String userDirectory = Paths.get("") .toAbsolutePath() .toString(); System.out.println(userDirectory); } // File("") private static void printCurrentWorkingDirectory3() { String userDirectory = new File("").getAbsolutePath(); System.out.println(userDirectory); } // FileSystems private static void printCurrentWorkingDirectory4() { String userDirectory = FileSystems.getDefault() .getPath("") .toAbsolutePath() .toString(); System.out.println(userDirectory); } }
Выход
/home/mkyong/projects/core-java/java-io /home/mkyong/projects/core-java/java-io /home/mkyong/projects/core-java/java-io /home/mkyong/projects/core-java/java-io
Обычно мы используем System.getProperty("user.dir")
для получения текущего рабочего каталога.
2. Рабочий каталог для файла JAR?
Не используйте System.getProperty ("user.dir")
, Файл
или Путь
для доступа к файлу, который находится внутри файла JAR
, это не сработает. Вместо этого мы должны использовать getClassLoader().getResourceAsStream()
.
// get a file from the resources folder, root of classpath in JAR private InputStream getFileFromResourceAsStream(String fileName) { // The class loader that loaded the class ClassLoader classLoader = getClass().getClassLoader(); InputStream inputStream = classLoader.getResourceAsStream(fileName); // the stream holding the file content if (inputStream == null) { throw new IllegalArgumentException("file not found! " + fileName); } else { return inputStream; } }
Примечание Приведенный выше код извлечен из этого Прочитайте файл из папки ресурсов . Обратитесь к примеру 2 для доступа к файлу, который находится внутри файла JAR.
Скачать Исходный Код
$клон git $клон git
$cd java-ввод-вывод
Рекомендации
- Java – Чтение файла из папка ресурсов
- Файл JavaDoc
- Путь JavaDoc
- Как отобразить все системные свойства
- Википедия – Рабочий каталог
Оригинал: “https://mkyong.com/java/how-to-get-the-current-working-directory-in-java/”