Ответ 1
Попробуйте
String path = new File(".").getCanonicalPath();
Я создаю приложение Java, где я использую log4j. Я дал абсолютный путь к файлу конфигурации log4j, а также абсолютный путь к сгенерированному файлу журнала (где этот файл журнала сгенерирован). Я могу получить абсолютный путь веб-приложения Java во время выполнения через:
String prefix = getServletContext().getRealPath("/");
но в контексте обычного приложения Java, что мы можем использовать?
Попробуйте
String path = new File(".").getCanonicalPath();
Непонятно, о чем вы просите. Я не знаю, что "в отношении используемого веб-приложения" означает, что если getServletContext().getRealPath()
не является ответом, но:
System.getProperty("user.dir")
System.getProperty("user.home")
this.getClass().getProtectionDomain().getCodeSource().getLocation()
.А как насчет использования this.getClass().getProtectionDomain().getCodeSource().getLocation()
?
Если вы говорите о веб-приложении, вы должны использовать getRealPath
от объекта ServletContext
.
Пример:
public class MyServlet extends Servlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException{
String webAppPath = getServletContext().getRealPath("/");
}
}
Надеюсь, что это поможет.
new File(".").getAbsolutePath()
Лучше сохранять файлы в подкаталог user.home, чем везде, где есть приложение. может проживать.
Sun прилагала значительные усилия для обеспечения апплетов и приложений. запущенный с использованием Java Web Start, не может определить приложения. реальный путь. Это изменило много приложений. Я не удивлюсь, если изменения будут распространены на другие приложения.
Поскольку путь приложения для 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()
, и вы должны быть в порядке.
/*****************************************************************************
* 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()
Я использую этот метод, чтобы получить полный путь к jar или exe.
File pto = new File(YourClass.class.getProtectionDomain().getCodeSource().getLocation().toURI());
pto.getAbsolutePath());
Если вы хотите получить реальный путь к веб-приложению 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";
}
Выражение
new File(".").getAbsolutePath();
предоставит вам текущий рабочий каталог, связанный с исполнением JVM. Однако JVM предоставляет множество других полезных свойств через
System.getProperty(propertyName);
интерфейс. Список этих свойств можно найти здесь.
Это позволит вам ссылаться на текущий каталог пользователей, каталог temp и т.д. независимым от платформы способом.