2009-06-03 3 views
10

Lors de l'écriture d'un fichier JSP, comment puis-je obtenir le répertoire courant de ce fichier à l'exécution
(pour pouvoir parcourir le répertoire et afficher son contenu)?Comment lister le contenu d'un répertoire de serveur à l'aide de JSP?

Est-ce que certaines opérations d'E/S de fichiers pourraient être restreintes en raison de problèmes de sécurité?

Je préférerais une solution sans accéder à certaines variables/propriétés de serveur spécifiques à l'implémentation.

EDIT:
Je ne demanderais pas si elle était aussi simple que new File("."), parce que ce serait tout simplement donner le répertoire des exécutables du serveur.

+0

question similaire avec la réponse en utilisant la syntaxe JSP: http://stackoverflow.com/a/21254129/ 333296 – Nux

Répondre

3

vous devez connaître le chemin de la jsp dans votre application web afin que vous puissiez passer que pour getRealPath()

File jsp = request.getRealPath(pathToJspInWebapp); //eg. /WEB-INF/jsp/my.jsp 
File directory = jsp.getParentFile(); 
File[] list = directory.listFiles(); 
+1

Attention: ceci échouera lorsque le fichier WAR n'a pas explosé! –

0

Un bon/exemple de travail:

File jsp = new File(request.getRealPath(request.getServletPath())); 
File dir = jsp.getParentFile(); 
File[] list = dir.listFiles(); 
+0

Ceci n'est pas 'correct' à partir de la spécification Servlet 2.1! – ingyhere

2

partir de la version 2.1 de l'utilisation de l'API Java Servlet:

File jsp = new File(request.getSession().getServletContext().getRealPath(request.getServletPath())); 
File dir = jsp.getParentFile(); 
File[] list = dir.listFiles(); 
6
 <%@page import="java.io.*" %> 
     <%@page import="java.util.*" %> 
     <%!  public void GetDirectory(String a_Path, Vector a_files, Vector a_folders) { 
       File l_Directory = new File(a_Path); 
       File[] l_files = l_Directory.listFiles(); 

       for (int c = 0; c < l_files.length; c++) { 
        if (l_files[c].isDirectory()) { 
         a_folders.add(l_files[c].getName()); 
        } else { 
         a_files.add(l_files[c].getName()); 
        } 
       } 


      } 
     %> 

     <% 
      Vector l_Files = new Vector(), l_Folders = new Vector(); 
      GetDirectory("C:/mydirectory/", l_Files, l_Folders); 

      //folders should be left out... 
      //for(int a = 0 ; a<l_Folders.size() ; a++) 
      //out.println("[<b>"+l_Folders.elementAt(a).toString() + "</b>]<br>") ; 

      //generate files as XML 
      out.println("<music>"); 

      for (int a = 0; a < l_Files.size(); a++) { 
       out.println("<file>" + l_Files.elementAt(a).toString() + "</file>"); 
      } 

      out.println("</music>"); 
     %> 

Remplacer "C:/monrépertoire /" avec votre répertoire

0

Je l'ai utilisé celui-ci,

File jspFile = new File(request.getRealPath(request.getServletPath())); 
     File dir = jspFile.getParentFile(); 
     String requestURL = request.getRequestURL().toString(); 
     String urlDir = requestURL.substring(0, requestURL.lastIndexOf('/')); 

     File[] files = dir.listFiles(new FilenameFilter() { 
      @Override 
      public boolean accept(File dir, String name) { 
       return name.endsWith(".ipa"); 
      } 
     }); 
Questions connexes