2017-10-11 2 views
0

J'essaie d'obtenir une liste de dossiers à partir du répertoire racine de mon projet JSP, puis de les afficher à l'utilisateur dans une table, avec des liens vers des dossiers enfants et la taille du dossier. Le code ci-dessous permet d'obtenir une liste de répertoires dans le dossier WebContent.Pourquoi est-ce que je reçois un pointeur null lors de l'accès aux fichiers sur Tomcat (à l'aide de HttpServlet)?

String absolutePath = this.getServletContext().getRealPath("/") + relativePath; 
String fileList = "<tr><th>File Name</th><th>Size [B]</th><th>Last Updated</th></tr>"; 

File folder = new File(absolutePath); 
File[] listOfFiles = folder.listFiles(); 

for (int i = 0; i < listOfFiles.length; i++) { 
    if (listOfFiles[i].isDirectory()) { 
     Path file = listOfFiles[i].toPath(); 
     BasicFileAttributes attr = Files.readAttributes(file, BasicFileAttributes.class); 

     String time = attr.lastAccessTime().toString(); 

     fileList += "<tr><td><img width='15px' alt='**' src='assets\\images\\folder.png'/>&nbsp;" 
      + "<button onclick='navigate(this);'>" + listOfFiles[i].getName() + "</button></td><td>" + attr.size() + "</td><td>" 
      + time.replace("T", " ").substring(0, time.indexOf(".")) 
      + "</td></tr>"; 
    } 
} 

Lorsque je lance le projet localement, il n'y a pas de problème. Mais après avoir déployé mon fichier .war sur un serveur, lors de l'exécution, je reçois une erreur 500 (exception de pointeur null) à la ligne:

for (int i = 0; i < listOfFiles.length; i++) 

Ce qui me dit que le tableau de dossier n'a pas été initialisé avec les dossiers enfants. Je suppose que je n'ai pas le même accès à ces dossiers sur le serveur que je le fais quand je cours localement.

Des idées pour accéder à ces dossiers? P.S. Le serveur fonctionne sous Unix.

+0

Je voudrais enregistrer la valeur "absoultepath" et voir les systèmes de fichiers du serveur a un dossier avec le chemin exact. Vous savez quel est le problème, donc déboguer et voir. – kosa

Répondre

1

D'abord une petite erreur:

src='assets\\images\\folder.png' 

devrait être

src='assets/images/folder.png' 

Alors File.listFiles peut revenir nulle dans certains cas.

Les noms de fichiers doivent être sensibles à la casse , les chemins séparés par /. Voyant la première petite erreur, cela pourrait être le cas ici. Si vous déployez les fichiers pendant la guerre, TomCat doit être configuré pour décompresser le fichier zip de guerre. Facilement vérifié.

Si vous téléchargez les fichiers, les droits de dossier et de fichier doivent être corrects.

+0

Oui, je suis allé dans le code et vérifié mes séparateurs de fichiers, je les avais comme '\' pour windows et pas '/' pour unix. Cela a résolu mon problème. Merci. –