Подтвердить что ты не робот

Как получить реальный путь Java-приложения во время выполнения?

Я создаю приложение Java, где я использую log4j. Я дал абсолютный путь к файлу конфигурации log4j, а также абсолютный путь к сгенерированному файлу журнала (где этот файл журнала сгенерирован). Я могу получить абсолютный путь веб-приложения Java во время выполнения через:

String prefix =  getServletContext().getRealPath("/");

но в контексте обычного приложения Java, что мы можем использовать?

4b9b3361

Ответ 1

Попробуйте

String path = new File(".").getCanonicalPath();

Ответ 2

Непонятно, о чем вы просите. Я не знаю, что "в отношении используемого веб-приложения" означает, что если getServletContext().getRealPath() не является ответом, но:

  • Текущий текущий рабочий каталог пользователя указан System.getProperty("user.dir")
  • Текущий домашний каталог пользователя задается System.getProperty("user.home")
  • Местоположение файла JAR, из которого был загружен текущий класс, задается this.getClass().getProtectionDomain().getCodeSource().getLocation().

Ответ 3

А как насчет использования this.getClass().getProtectionDomain().getCodeSource().getLocation()?

Ответ 4

Если вы говорите о веб-приложении, вы должны использовать getRealPath от объекта ServletContext.

Пример:

public class MyServlet extends Servlet {
    public void doGet(HttpServletRequest req, HttpServletResponse resp) 
              throws ServletException, IOException{
         String webAppPath = getServletContext().getRealPath("/");
    }
}

Надеюсь, что это поможет.

Ответ 5

new File(".").getAbsolutePath()

Ответ 6

Лучше сохранять файлы в подкаталог user.home, чем везде, где есть приложение. может проживать.

Sun прилагала значительные усилия для обеспечения апплетов и приложений. запущенный с использованием Java Web Start, не может определить приложения. реальный путь. Это изменило много приложений. Я не удивлюсь, если изменения будут распространены на другие приложения.

Ответ 7

Поскольку путь приложения для JAR и приложения, запущенного изнутри IDE, отличается, я написал следующий код, чтобы последовательно возвращать правильный текущий каталог:

import java.io.File;
import java.net.URISyntaxException;

public class ProgramDirectoryUtilities
{
    private static String getJarName()
    {
        return new File(ProgramDirectoryUtilities.class.getProtectionDomain()
                .getCodeSource()
                .getLocation()
                .getPath())
                .getName();
    }

    private static boolean runningFromJAR()
    {
        String jarName = getJarName();
        return jarName.contains(".jar");
    }

    public static String getProgramDirectory()
    {
        if (runningFromJAR())
        {
            return getCurrentJARDirectory();
        } else
        {
            return getCurrentProjectDirectory();
        }
    }

    private static String getCurrentProjectDirectory()
    {
        return new File("").getAbsolutePath();
    }

    private static String getCurrentJARDirectory()
    {
        try
        {
            return new File(ProgramDirectoryUtilities.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath()).getParent();
        } catch (URISyntaxException exception)
        {
            exception.printStackTrace();
        }

        return null;
    }
}

Просто позвоните getProgramDirectory(), и вы должны быть в порядке.

Ответ 8

/*****************************************************************************
     * return application path
     * @return
     *****************************************************************************/
    public static String getApplcatonPath(){
        CodeSource codeSource = MainApp.class.getProtectionDomain().getCodeSource();
        File rootPath = null;
        try {
            rootPath = new File(codeSource.getLocation().toURI().getPath());
        } catch (URISyntaxException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }           
        return rootPath.getParentFile().getPath();
    }//end of getApplcatonPath()

Ответ 9

Я использую этот метод, чтобы получить полный путь к jar или exe.

File pto = new File(YourClass.class.getProtectionDomain().getCodeSource().getLocation().toURI());

pto.getAbsolutePath());

Ответ 10

Если вы хотите получить реальный путь к веб-приложению Java, например Spring (Servlet), вы можете получить его из объекта Servlet Context, который поставляется с вашим HttpServletRequest.

@GetMapping("/")
public String index(ModelMap m, HttpServletRequest request) {
    String realPath = request.getServletContext().getRealPath("/");
    System.out.println(realPath);
    return "index";
}

Ответ 11

Выражение

new File(".").getAbsolutePath();

предоставит вам текущий рабочий каталог, связанный с исполнением JVM. Однако JVM предоставляет множество других полезных свойств через

System.getProperty(propertyName); 

интерфейс. Список этих свойств можно найти здесь.

Это позволит вам ссылаться на текущий каталог пользователей, каталог temp и т.д. независимым от платформы способом.