Comment puis-je obtenir chemin de la ressource sous WEB-INF/dossier de classe (java ee web dynamique de projet)
Je développe web dynamique de projet dans Eclipse. Un seul fichier, le fichier nommé 'users.txt il est situé sous le dossier des classes (WEB-INF/classes/users.txt).
Comment je peux obtenir le chemin d'accès relatif de ce fichier dans la classe (classe de base, pas de classe de servlet)? Je vais utiliser ce chemin pour ajouter plusieurs lignes de texte.
Chrétienne, c'est le code qui fonctionne pour la lecture. Le problème est que je ne sais pas comment faire pour créer un objet de la rédaction (de sortie) dans le même fichier avec chemin d'accès relatif.
public Products(){
try{
InputStream in = getClass().getClassLoader().getResourceAsStream("products.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(in));
readProducts(br);
in.close();
br.close();
}catch(Exception e){
System.out.println("File doesn't exists");
}
}
public void readProducts(BufferedReader in) throws NumberFormatException, IOException{
String id="";
String name="";
double price=0;
StringTokenizer st;
String line;
while((line=in.readLine())!=null){
st=new StringTokenizer(line,";");
while(st.hasMoreTokens()){
id=st.nextToken();
name=st.nextToken();
price=Double.parseDouble(st.nextToken());
}
products.put(id,new Product(id,name,price));
}
}
- Pouvez-vous poster quelques codes au moins ce que vous avez essayé jusqu'à présent?
- Vous êtes à la recherche de la solution dans la mauvaise direction. Vous n'êtes pas censé écrire dans le dossier de déploiement au cours de l'exécution, a fortiori, de les déployer classpath. Placez le fichier dans un emplacement fixe à l'extérieur du dossier de déploiement. Un bonus supplémentaire est que votre problème actuel est immédiatement résolu de cette façon. Par ailleurs, la pratique courante est d'utiliser une base de données SQL pour ce genre de trucs.
Vous devez vous connecter pour publier un commentaire.
Une manière générale, vous ne devriez pas compter sur la modification des fichiers dans le répertoire de votre application web.
L'une des raisons est que le conteneur de servlet n'est pas obligé d'extraire vos
.war
fichier pour le fs, il pourrait, en théorie, l'exécution de votre application web à partir de la mémoire. Ouais, Tomcat et la plupart des conteneurs ne déballez.war
mais il n'y a rien dans Java EE des specs qui dit qu'ils doivent le faire.De toute façon, si vous pensez que cela vaut la peine de risque, vous pouvez utiliser ServletContext.getRealPath pour obtenir l'emplacement du fichier dans votre répertoire webapp.
Cela devrait ressembler à quelque chose comme ceci:
myfile
sous votre webapp racine (doit être situé dans le même dossier commeWEB-INF
dans votre.war
).faire quelque chose comme ceci dans votre servlet (ou n'importe où où vous pouvez accéder à servlet contexte):
String filePath = getServletContext().getRealPath("monfichier");
Notez que pour que cela fonctionne, vous devriez être en mesure d'extraire le fichier avec la demande, comme:
http://<host>:<port>/<contextPath>/myfile
(voir la méthode docs pour plus de détails)