Je crée une application Java sur laquelle j'utilise log4j. J'ai donné le chemin absolu du fichier de configuration log4j ainsi qu'un chemin absolu du fichier journal généré (où ce fichier journal est généré). Je peux obtenir le chemin absolu d’une application Web Java au moment de l’exécution via:
String prefix = getServletContext().getRealPath("/");
mais dans le contexte d'une application Java normale, que pouvons-nous utiliser?
Essayer;
String path = new File(".").getCanonicalPath();
Ce que vous demandez n'est pas clair. Je ne sais pas ce que "par rapport à l'application Web que nous utilisons" signifie que si getServletContext().getRealPath()
n'est pas la solution, mais:
System.getProperty("user.dir")
System.getProperty("user.home")
this.getClass().getProtectionDomain().getCodeSource().getLocation()
.Et qu'en est-il de l'utilisation de this.getClass().getProtectionDomain().getCodeSource().getLocation()
?
Si vous parlez d'une application Web, vous devez utiliser la variable getRealPath
à partir d'un objet ServletContext
.
Exemple:
public class MyServlet extends Servlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException{
String webAppPath = getServletContext().getRealPath("/");
}
}
J'espère que cela t'aides.
new File(".").getAbsolutePath()
Comme le chemin d'application d'un JAR
et d'une application s'exécutant à l'intérieur d'un IDE
est différent, j'ai écrit le code suivant pour retourner systématiquement le bon répertoire actuel:
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;
}
}
Appelez simplement getProgramDirectory()
et vous devriez être bon dans les deux cas.
Il est préférable de sauvegarder les fichiers dans un sous-répertoire de user.home plutôt que dans n'importe quelle application. pourrait résider.
Sun a déployé des efforts considérables pour s'assurer que les applets et les applications. lancé avec Java Web Start ne peut pas déterminer les applications. vrai chemin. Ce changement a cassé de nombreuses applications. Je ne serais pas surpris si les modifications sont étendues à d'autres applications.
J'utilise cette méthode pour obtenir un chemin complet vers jar ou exe.
File pto = new File(YourClass.class.getProtectionDomain().getCodeSource().getLocation().toURI());
pto.getAbsolutePath());
/*****************************************************************************
* 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()
J'ai un fichier "cost.ini" à la racine de mon chemin d'accès aux classes. Mon fichier JAR s'appelle "cost.jar" .
Le code suivant:
try {
//JDK11: replace "UTF-8" with UTF_8 and remove try-catch
String rootPath = decode(getSystemResource("cost.ini").getPath()
.replaceAll("(cost\\.jar!/)?cost\\.ini$|^(file\\:)?/", ""), "UTF-8");
showMessageDialog(null, rootPath, "rootpath", WARNING_MESSAGE);
} catch(UnsupportedEncodingException e) {}
Le chemin renvoyé par .getPath()
a le format suivant:
file:/C:/folder1/folder2/cost.jar!/cost.ini
/C:/folder1/folder2/cost.ini
Toute utilisation de File
, entraîne une exception, si l'application est fournie au format JAR.
Si vous souhaitez obtenir le chemin réel d'une application Web Java tel que Spring (Servlet), vous pouvez l'obtenir à partir de l'objet Contexte Servlet fourni avec votre HttpServletRequest.
@GetMapping("/")
public String index(ModelMap m, HttpServletRequest request) {
String realPath = request.getServletContext().getRealPath("/");
System.out.println(realPath);
return "index";
}
Si vous souhaitez utiliser cette réponse: https://stackoverflow.com/a/4033033/10560907
Vous devez ajouter une déclaration d'importation comme ceci:
import Java.io.File;
en tout début de code source Java.
aimez cette réponse: https://stackoverflow.com/a/43553093/10560907