11

When writing a JSP file, how can I get the current directory of this file at runtime
(to be able to iterate the directory and list its contents)?

Would some file I/O operations be restricted because of some security issues?

I would prefer a solution without accessing some implementation-specific server variables / properties.

EDIT:
I wouldn't ask if it were as simple as new File("."), because this would just give the directory of server's executables.

Eddie
  • 53,828
  • 22
  • 125
  • 145
ivan_ivanovich_ivanoff
  • 19,113
  • 27
  • 81
  • 100
  • Similar question with answer using JSP syntax: http://stackoverflow.com/a/21254129/333296 – Nux Jan 21 '14 at 09:35

5 Answers5

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

Replace "C:/mydirectory/" with your directory

Code Spy
  • 9,626
  • 4
  • 66
  • 46
5

you should know the path of the jsp within your web application so you can pass that to getRealPath()

File jsp = request.getRealPath(pathToJspInWebapp);  //eg. /WEB-INF/jsp/my.jsp
File directory = jsp.getParentFile();
File[] list = directory.listFiles();
objects
  • 8,637
  • 4
  • 30
  • 38
  • 1
    Attention: This will fail when the WAR file is not exploded! – Michael-O Jul 23 '13 at 12:01
  • NOTE: .getRealPath() is deprecated from Version 2.1 of Servlet API https://coderanch.com/t/365382/java/Replacement-deprecated-servlet-method – chrips Oct 01 '18 at 10:57
3

As of Version 2.1 of the Java Servlet API use:

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

I have used this one,

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");
            }
        });
karim
  • 15,408
  • 7
  • 58
  • 96
0

A correct/working example:

File jsp = new File(request.getRealPath(request.getServletPath()));
File dir = jsp.getParentFile();
File[] list = dir.listFiles();
Pavel Vlasov
  • 4,206
  • 6
  • 41
  • 54