Servlet code to download text file from website – Java

Here’s a servlet code example to download a text file from a website.

For example

Let’s say a text file named “testing.txt” , and you want to let user download it with a URL , for example “http://localhost:8080/servlet/DownloadDemo” .

1. Create a text file named “testing.txt” , put it into the project root folder.


\--servlet (project root folder)
      \--testing.txt (download file here)
      \--WEB-INF
           \--web.xml

2. Servlet code


package com.mkyong;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ServletDownloadDemo extends HttpServlet{
	
  private static final int BYTES_DOWNLOAD = 1024;
	
  public void doGet(HttpServletRequest request, 
   HttpServletResponse response) throws IOException{
	response.setContentType("text/plain");
	response.setHeader("Content-Disposition",
                     "attachment;filename=downloadname.txt");
	ServletContext ctx = getServletContext();
	InputStream is = ctx.getResourceAsStream("/testing.txt");
		
	int read=0;
	byte[] bytes = new byte[BYTES_DOWNLOAD];
	OutputStream os = response.getOutputStream();
		
	while((read = is.read(bytes))!= -1){
		os.write(bytes, 0, read);
	}
	os.flush();
	os.close();	
   }
}
Note
The “getResourceAsStream()” method with a forward slash (“/”), which represent the root of your web application.

3. Web deployment descriptor


<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

	<display-name>serlvetdemo</display-name>
	
	<servlet>
		<servlet-name>ServletName</servlet-name>
		<servlet-class>com.mkyong.ServletDownloadDemo</servlet-class>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>ServletName</servlet-name>
		<url-pattern>/DownloadDemo</url-pattern>
	</servlet-mapping>

</web-app>

4. Compiled it and copy to the Tomcat folder


\--Tomcat
     \--webapps
          \--servlet 
               \-- testing.txt (download file)
               \--WEB-INF 
                    \--web.xml
                    \--classes
                         \--com
                              \--mkyong
                                   \--ServletDownloadDemo.class

4. Done , access URL http://localhost:8080/servlet/DownloadDemo , it will prompts user to download the text file automatically.

Note
You may interest this file download example in Struts 1.x

About the Author

author image
mkyong
Founder of Mkyong.com, love Java and open source stuff. Follow him on Twitter, or befriend him on Facebook or Google Plus. If you like my tutorials, consider make a donation to these charities.

Comments

Leave a Reply

avatar
newest oldest most voted
sunny
Guest
sunny

Hi,

I am getting NullPointerException at is.read please help me in this regard.

Bhat
Guest
Bhat

Please provide git link as well. that will help much

fsadfsadsafd
Guest
fsadfsadsafd

vo beja sua bok seu lindo, obrigado pelo codigo

mohit dawar
Guest
mohit dawar

Sir
the above code doesn’t work over https.
I have configured my apache tomcat for ssl but now i am not able to download files. Pls suggest the changes. With http it works but fails over https.
Thanku

KEV
Guest
KEV
Yura
Guest
Yura

It looks like os.flush() and os.close() is obsolete here since servlet container will do it anyway. As per http://stackoverflow.com/questions/5043657/do-i-need-to-flush-the-servlet-outputstream

Jay Poojara
Guest
Jay Poojara

Your tutorials help me a lot…. Thank u….

Ajay
Guest
Ajay

I have a code like:

String recommendedFilename = getLocalEntityName();
response.setContentType(“application/x-download”);
response.setContentLength(exportData.length);
response.setHeader(“Content-Disposition”, “attachment; filename=” + recommendedFilename);

But the when filename (the value for recommendedFilename) contains japanese characters, then the default filename in the “Open/Save” dialogue is not proper japanese. All the japanese characters are coming as junk. Can you please help?

Beaver County PA dui attorney
Guest
Beaver County PA dui attorney

Designer drugs/herbal remedies and driving
under the influence of intoxicants?

saket
Guest
saket

works fine ,thanks for sharing ,one query i have is that “InputStream is” should be closed or not? because at my end i am not able to delete the file latter since JVM still has it open mode, in my code i have opened a scriplet in jsp and put the above code in it.

ravi
Guest
ravi

tanq very much :)

but how to make my browser ask me to download the file ?

debra
Guest
debra

I am truly thankful to the holder of this web page who has shared this
impressive post at at this time.

sandeep
Guest
sandeep

Thanks the code is working but I want to know if we want to get put an anchor in html file and by clicking we start download how to retrieve the name from anchor link…pls help

temp
Guest
temp

You saved my life again. Thank you.

raja
Guest
raja

hi mkyong,

i have a small requirement in downloading file from linux, can you tel me how to do….

j0n
Guest
j0n

Hi,
do you know if it’s possible to download the file in a specific directory (specified by the servlet) without asking anything to the user?

waynegomez
Guest
waynegomez

hahaha I didnt even get what extention I should save these files into or where I should put it to..

Alessandro
Guest
Alessandro

thanks a lot for this post

but in need something different…

I want that the text file is showed in the browser and not downloaded,
what is the change that i have to do in the code?

thanks

tirupathi rao
Guest
tirupathi rao

where i have to place class file? how to get com.mkyong package?

trackback
Report 2?? Project | Vaniazig's Blog

[…] ¬†http://www.mkyong.com/servlet/servlet-code-to-download-text-file-from-website-java/ […]

Sula
Guest
Sula

Someone necessarily help to make critically articles I might state. That is the very first time I frequented your web page and to this point? I surprised with the research you made to create this actual publish amazing. Fantastic job!

John
Guest
John

I have a situation where i have created my PDF file in a servlet using bytearrayoutputstream. When run on its own the servlet does work and produces my PDF file, however, it is an instance where i need the file to be opened from a JSP on a button commmand. Is anyone familiar with how I would go about that?

kaja
Guest
kaja

i’m using jBoss server so can any one help me for that…

San Diego Lawyer
Guest
San Diego Lawyer

Great article! Thanks a lot

Prefabrik
Guest
Prefabrik

Thanks for posting such a useful example.

Tom
Guest
Tom

Hello,
My name is Ming. I am a student at GSU. I find th eprogram very useful but I’d like to ask the author and other forum members a question regarding download a PDF file to my pc. I’d like to know if this program works for download PDF file to my pc ? Thanks in advance.

plaj bayra??
Guest
plaj bayra??

really good information thanks admin

Download
Guest
Download

Thanks Nice Post. I added this thread to favorites.

kezia
Guest
kezia

what is package com.mkyong? and where can i download it?
can it used to open a web browser with java program?

thanks

shravan
Guest
shravan

Thanks for posting such a useful example.