2013-04-15 4 views
3

J'essaie de créer un fichier sur mon serveur. J'ai envoyé une image, et je veux créer cette image dans un dossier de mon serveur, mais avec le chemin relatif.Chemin relatif de mon serveur Java

String filePath = "C:\\Users\\Administrador\\Desktop\\Proyecto\\clienteServidor\\Server\\folder\\image.jpg"; 
File imageFile = new File(filePath); 
... 

Je fais avec le chemin absolu.

Merci

+1

Salut et bienvenue à SO! S'il vous plaît préciser votre question - quel est exactement le problème que vous avez lors de la mise en œuvre de cela? Qu'est-ce qui ne fonctionne pas comme prévu? – akluth

+1

vous ne pouvez pas. Selon le serveur que vous utilisez, le système de fichiers peut ne pas être accessible en écriture ou même disponible pour votre application. Si vous voulez plus de détails, vous devez nous dire quel serveur vous utilisez. –

+0

Cette source n'a aucun problème. Mais je ne veux pas utiliser tout le chemin. J'ai Tomcat 7.0 –

Répondre

-1

Il est faisable, mais, comme Dmitry dit, il ne fonctionne pas sur tous les serveurs. SecurityManager classe doit être consulté si votre webapp a le privilège d'écrire dans ce dossier. ou vous obtiendrez une exception.

Une façon de le faire est par l'intermédiaire ServletContext:

URL webAppRoot = this.getServletConfig().getServletContext() 
    .getResource("/images/new-image.jpg"); 

Il pointera vers votre ${tomcat}/webapps/mywebapp/images/new-image.jpg.

Une autre façon est via ProtectionDomain:

URL runningClassLocation = this.getClass().getProtectionDomain() 
    .getCodeSource().getLocation(); 

Mais cela vous donnera très probablement jar:file://...myapp.jar!/my/package/servlet.class.

Après avoir l'URL, vous le convertissez en File et ajoutez un chemin d'accès relatif à votre dossier d'images. Je suis d'accord avec Jim, et insiste sur le fait que le faire comme ceci est juste à des fins académiques. Java n'est pas comme PHP donc vous ne devriez pas avoir de dossier uploads dans le dossier de votre application web. Habituellement, cela est fait en permettant à un utilisateur de niveau administrateur de spécifier un chemin d'accès à un dossier réservé aux besoins de stockage de votre application.

+0

Cette idée peut fonctionner dans certaines situations, mais en général ne peut pas être invoquée. Si l'application est exécutée à partir d'un fichier de guerre, cela échouera. –

+1

@Jim Le serveur AFAIK décompresse le fichier 'mywebapp.war' dans' $ {tomcat}/work/mywebapp' pour que cela fonctionne.Comment pensez-vous que ** Struts ** lit ses fichiers de configuration quand il est spécifié comme '/ WEB-INF/struts-config.xml'? Avec la première approche que j'ai mentionnée. – Cebence

+0

Je n'ai rien dit à propos de la lecture. Vous pouvez lire tout ce que vous voulez, le système Java est conçu pour cela. Ce que vous ne pouvez pas faire, c'est _write_ (c.-à-d. Créer un fichier), ce que tente de faire l'OP. –

0

codage dur un répertoire est rarement bon pour le codage. Que se passe-t-il s'il y a une faute de frappe dans votre code? En utilisant une combinaison de ./ ou ./*

ou même en utilisant

new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath()); 

Ceci est expliqué here.

+0

Avec ce chemin MyClass me donne. /C:/Users/Administrador/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/SetasServer/WEB-INF/classes/com/rest/resource/PhotoResource.class Quel est ce dossier? Parce que j'ai mon projet dans un autre dossier ... –

+1

Lorsque vous exécutez votre projet dans Eclipse, son comportement par défaut est de créer un dossier temporaire comme celui-ci et de lancer votre webapp à partir de là pour ne pas interférer avec une installation Tomcat existante. – Cebence

+0

Je suppose que vous voulez dire l'extrait de code. Qu'en est-il de la combinaison de ./ et ./ –