How to capture a screenshot using Java and save it to a file?

A screenshot, screen capture, or screen dump is an image taken by the computer to record the visible items displayed on the monitor or another visual output device. Usually this is a digital image taken by the host operating system or software running on the computer device, but it can also be a capture made by a camera or a device intercepting the video output of the computer.

Screenshots, screen dumps, or screen captures can be used to demonstrate a program, a particular problem a user might be having or generally when computer output needs to be shown to others or archived, or to simply show off what you do on your computer to others. [Wikipedia]

The following java program demonstrates how to use Robot class from java.awt package to capture screenshots and save the image thus captured to disk.

package com.kushal.utils;

/**
 * @author Kushal Paudyal
 * JavaScreenCaptureUtil.java
 * 
 * This utility captures the screenshot and saves
 * the captured image to disk.
 */
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import javax.imageio.ImageIO;

public class JavaScreenCaptureUtil {

	public static void main(String args[]) throws Exception {

		/**
		 * This class (Robot.java) is used to generate native system input events for the 
		 * purposes of test automation, self-running demos, and other 
		 * applications where control of the mouse and keyboard is needed. 
		 * The primary purpose of Robot is to facilitate automated testing 
		 * of Java platform implementations. 
		 */
		Robot robot = new Robot();
		
		/**
		 * Get the current screen dimensions.
		 */
		Dimension d = new Dimension(Toolkit.getDefaultToolkit().getScreenSize());
		int width = (int) d.getWidth();
		int height = (int) d.getHeight();
		
		
		/**
		 * Delay the robot for 5 seconds (5000 ms) allowing you to switch to proper
		 * screen/window whose screenshot is to be taken.
		 * 
		 * You can change the delay time as required.
		 */
		robot.delay(5000);
		
		/**
		 * Create a screen capture of the active window and then create a buffered image
		 * to be saved to disk.
		 */
		Image image = robot.createScreenCapture(new Rectangle(0, 0, width,
				height));

		BufferedImage bi = new BufferedImage(width, height,
				BufferedImage.TYPE_INT_RGB);
		Graphics g = bi.createGraphics();
		g.drawImage(image, 0, 0, width, height, null);

		/**
		 * Filename where to save the file to.
		 * I am appending formatted timestamp to the filename.
		 */
		String fileNameToSaveTo = "C:/temp/screenCapture_"
				+ createTimeStampStr() + ".PNG";
		
		/**
		 * Write the captured image to a file.
		 * I am using PNG format. You can choose PNG, JPG, GIF.
		 */
		writeImage(bi, fileNameToSaveTo, "PNG");

		System.out.println("Screen Captured Successfully and Saved to:n"+fileNameToSaveTo);

	}

	/**
	 * This method writes a buffered image to a file
	 * 
	 * @param img -- > BufferedImage
	 * @param fileLocation --> e.g. "C:/testImage.jpg"
	 * @param extension --> e.g. "jpg","gif","png"
	 */
	public static void writeImage(BufferedImage img, String fileLocation,
			String extension) {
		try {
			BufferedImage bi = img;
			File outputfile = new File(fileLocation);
			ImageIO.write(bi, extension, outputfile);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 
	 * @return String representation of timestamp 
	 * in the format of yyyyMMdd_hhmmss (e.g. 20100426_111612)
	 * @throws Exception
	 */
	public static String createTimeStampStr() throws Exception {
		Calendar mycalendar = Calendar.getInstance();
		SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd_hhmmss");
		String timeStamp = formatter.format(mycalendar.getTime());

		return timeStamp;

	}

       /*
	 * SANJAAL CORPS MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE
	 * SUITABILITY OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT
	 * LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
	 * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SANJAAL CORPS SHALL NOT BE
	 * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING,
	 * MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
	 * 
	 * THIS SOFTWARE IS NOT DESIGNED OR INTENDED FOR USE OR RESALE AS ON-LINE
	 * CONTROL EQUIPMENT IN HAZARDOUS ENVIRONMENTS REQUIRING FAIL-SAFE
	 * PERFORMANCE, SUCH AS IN THE OPERATION OF NUCLEAR FACILITIES, AIRCRAFT
	 * NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL, DIRECT LIFE
	 * SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH THE FAILURE OF THE
	 * SOFTWARE COULD LEAD DIRECTLY TO DEATH, PERSONAL INJURY, OR SEVERE
	 * PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH RISK ACTIVITIES"). SANJAAL CORPS
	 * SPECIFICALLY DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR
	 * HIGH RISK ACTIVITIES.
	 */

}

  1. How to extract plain Text from HTML Website easily in Java
  2. How To Find What Java Version You Are Using?
  3. Computing the total, free and usable disk space easily using JDK 1.6
  4. Creating java.util.date and java.util.sql objects from Calendar object
  5. Bar Code Generation In Java Using iText API
  6. Simple Tag Generator In Java For Music Blogs
  7. Tutorial on Converting an List of Strings or Numbers to a CSV file with optional sorting
  8. Calling URL Browser From Java Application
  9. Java Reflection Tutorial – List Methods Of A Class
  10. Cleaning Punctuation And White Spaces From A String
  11. Flipping An Image Horizontally and Vertically In Java
  12. How To Set Conditional Debug Breakpoints in Eclipse or IBM RAD?
  13. Rotating An Image In Java Graphics 2D By Specified Degree
  14. Java Tutorial – Using JCIFS to copy files to shared network drive using username and password
  15. Prime Number Finder In Java
  16. Java Tip: How to extract the content of a Jar File Using Command Prompt
  17. Utility Class For Getting SQL Connection and Closing It
  18. Java – How To Overlay One Image Over Another Using Graphics2D [Tutorial]
  19. Java Design Pattern – Singleton Pattern
  20. Reading / Writing File in Java and String Manipulation
  21. Finding Java Image Pixels Information – ARGB (Alpha, Red, Green Blue)
  22. How to capture a screenshot using Java and save it to a file?
  23. Calculating The Difference Between Two Dates In Terms of Months
  24. Getting The Name Of Currently Logged In User In The System
  25. How To Set And Get System Clipboard Contents In Java
  26. RGB To Hex and Hex To RGB Conversion Using Java and Regular Expressions
  27. Java 2D Graphics Example Tutorial On Paint, Gradient and Stroke
  28. Generating Nepali Unicode Sequence For Characters
  29. Java Tool To Compare Two Lists and Spit Out The Differences – Working Example
  30. Replacing non-ASCII characters using Java Regular Expressions
  31. Calculating Folder Size In Java
Tagged , , , , , , , , . Bookmark the permalink.

3 Responses to Calculating Folder Size In Java

  1. Pingback: Sanjaal.com » Latest Updates

  2. Jamie says:

    This approach uses less memory:

    public static class SizeCounter implements FileFilter
    {
    private long total = 0;
    public SizeCounter(){};
    public boolean accept(File pathname) {
    if ( pathname.isFile()) {
    total+=pathname.length();
    } else {
    pathname.listFiles(this);
    }
    return false;
    }
    public long getTotal()
    {
    return total;
    }
    }

    private static long getFileOrDirectorySize(File file) {
    SizeCounter counter = new SizeCounter();
    file.listFiles(counter);
    return counter.getTotal();
    }

  3. kushalzone says:

    Thank you Jamie for your optimized solution.

Leave a Reply

Your email address will not be published. Required fields are marked *