You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Russ Weeks <rw...@razorwire.ca> on 2005/07/12 23:14:12 UTC

Problem deleting files from servlet

Hi,

I've got a pretty vanilla Tomcat 5.5.9 install.  It seems like I can't
delete files within my webapp's document root from a servlet.

I have written a trivial servlet to isolate the problem from my app.
All it does is try to delete two files, one is outside the document
root, one is inside.  The external file is deleted, the internal one is
not.

I never create a stream for the internal file, so there shouldn't be
anything with a lock on it.  Tomcat has never served it.  I have tried
the System.gc() hack, it doesn't help.

I encountered these results on Win XP Home.  On Linux (Suse 9.1) the
code works perfectly.

The files are created with this command (in Cygwin), immediately before
starting Tomcat:

echo "I Am A Monkey" >> c:/test.txt; echo "I Am A Monkey Too" >>
c:/java/tomcat559/webapps/jim/ifs/test.txt

Here's the code to the servlet:

    protected void doGet(HttpServletRequest arg0, HttpServletResponse
arg1) throws ServletException, IOException {
        final String _external = "C:\\test.txt";
        final String _internal =
"C:\\java\\tomcat559\\webapps\\jim\\ifs\\test.txt";
        File extFile = new File( _external );
        File intFile = new File( _internal );
        tryDelete( extFile );
        tryDelete( intFile );
    }
    
    private void tryDelete( File file ) {
        System.out.println( "Got file at " + file.getPath() + " (" +
file.length() + " bytes)" );
        System.out.println( "file.exists() == " + file.exists() );
        System.out.println( "file.canWrite() == " + file.canWrite() );
        System.out.println( "file.delete() == " + file.delete() );   
    }

Here's the output:

Got file at C:\test.txt (14 bytes)
file.exists() == true
file.canWrite() == true
file.delete() == true
Got file at C:\java\tomcat559\webapps\jim\ifs\test.txt (36 bytes)
file.exists() == true
file.canWrite() == true
file.delete() == false

Sorry if this is in a spec somewhere, or has already been discussed.  I
took a quick look through the archives, couldn't find anything.

Any help appreciated.

Russ


---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org