2009-06-03 3 views
10

Quando si scrive un file JSP, come posso ottenere la directory corrente di questo file in fase di esecuzione
(per poter iterare la directory ed elencarne il contenuto)?Come elencare il contenuto di una directory del server usando JSP?

Alcune operazioni di I/O su file potrebbero essere limitate a causa di alcuni problemi di sicurezza?

Preferirei una soluzione senza accedere ad alcune variabili/proprietà del server specifiche dell'implementazione.

EDIT:
Non te lo chiederei se fosse così semplice come new File("."), perché questo sarebbe solo dare la directory di eseguibili del server.

+0

domanda simile con risposta utilizzando la sintassi JSP: http://stackoverflow.com/a/21254129/ 333296 – Nux

risposta

3

si dovrebbe conoscere il percorso del jsp all'interno della vostra applicazione web in modo da poter passare che a getRealPath()

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

Attenzione: questo fallirà quando il file WAR non sarà esploso! –

0

Una corretta/esempio di lavoro:

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

Questo non è 'corretto' a partire dalla specifica Servlet 2.1! – ingyhere

2

A partire dalla versione 2.1 di l'uso 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>"); 
     %> 

Sostituire "C:/mydirectory /" con la directory

0

ho usato questo,

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"); 
      } 
     });