Vous pouvez simplement accéder à un chemin de fichier pré-arrangé sur le système. Ceci est préférable car les fichiers ajoutés au répertoire webapp pourraient être perdus ou le webapp pourrait ne pas être décompressé en fonction de la configuration du système.
Dans notre serveur, nous définissons une propriété système définie dans le JVM du serveur d'application qui pointe vers le "répertoire principal" pour les données externes de notre application. Bien entendu, cela nécessite une modification de la configuration du serveur d'application (-DAPP_HOME=... ajouté à JVM_OPTS au démarrage), nous le faisons principalement pour faciliter les tests de code exécuté en dehors du contexte d'un serveur d'application.
Vous pourriez tout aussi bien récupérer un chemin à partir de la configuration du servlet:
MyAppHome
/usr/share/myapp
...
Ensuite, récupérez ce chemin et utilisez-le comme chemin de base pour lire le fichier fourni par le client.
public class MyAppConfig implements ServletContextListener {
// NOTE: les références statiques ne sont pas une bonne idée, montrées ici pour simplification
static File appHome;
static File customerDataFile;
public void contextInitialized(ServletContextEvent e) {
appHome = new File(e.getServletContext().getInitParameter("MyAppHome"));
File customerDataFile = new File(appHome, "SuppliedFile.csv");
}
}
class DataProcessor {
public void processData() {
File dataFile = MyAppConfig.customerDataFile;
// ...
}
}
Comme je l'ai mentionné, le problème le plus probable que vous rencontrerez est les restrictions de sécurité. Rien ne garantit que les webapps peuvent lire des fichiers au-dessus de leur racine webapp. Mais il existe généralement des méthodes simples pour accorder des exceptions pour des chemins spécifiques à des webapps spécifiques.
Peu importe le code dans lequel vous avez ensuite besoin d'accéder à ce fichier, puisque vous exécutez une application web, vous êtes assuré que ceci est initialisé en premier, et vous pouvez stocker sa valeur quelque part de pratique pour que le reste de votre code puisse y faire référence, comme dans mon exemple ou mieux encore, simplement transmettre le chemin en tant que paramètre au code qui en a besoin.