code: package edu.berkeley.nlp.util;
  
  import java.io.File;
  import java.io.FileFilter;
  import java.io.FileNotFoundException;
  import java.io.FileReader;
  import java.io.IOException;
  import java.util.ArrayList;
  import java.util.Collections;
  import java.util.List;
  
  public class IOUtil {
  
  	public static File createTempDirectory(String prefix) throws IOException {
  		File tempFile = File.createTempFile(prefix, "");
  		if (!tempFile.delete())
  			throw new IOException();
  		if (!tempFile.mkdir())
  			throw new IOException();
  		return tempFile;
  	}
  
  	/**
  	 * 
  	 * @param dir
  	 * @param filePrefix
  	 * @param fileExt
  	 * @param recursive
  	 * @return
  	 */
  	public static List<File> getFilesUnder(final String dir, // Directory
  			final String filePrefix, // Prefix for files
  			final String fileExt, // Extension of files
  			final boolean recursive) {
  		List<File> files = new ArrayList<File>();
  		File dirFile = new File(dir);
  		if (!dirFile.exists())
  			return files;
  		if (!dirFile.isDirectory())
  			return Collections.singletonList(dirFile);
  		for (File f : dirFile.listFiles()) {
  			if (f.isDirectory()) {
  				if (recursive)
  					files.addAll(getFilesUnder(f.getAbsolutePath(), filePrefix,
  							fileExt, recursive));
  				continue;
  			}
  			String name = f.getName();
  			if (name.startsWith(filePrefix) && name.endsWith(fileExt)) {
  				files.add(f);
  			}
  		}
  		return files;
  	}
  
  	public static FileFilter getFileFilter(final String prefix, final String ext) {
  		return new FileFilter() {
  			public boolean accept(File pathname) {
  				// TODO Auto-generated method stub
  				String name = pathname.getName();
  				return name.startsWith(prefix) && name.endsWith(ext);
  			}
  		};
  	}
  
  	public static boolean deleteDir(File dir) {
  		if (dir.isDirectory()) {
  			String[] children = dir.list();
  			for (int i = 0; i < children.length; i++) {
  				boolean success = deleteDir(new File(dir, children[i]));
  				if (!success) {
  					return false;
  				}
  			}
  		}
  
  		// The directory is now empty so delete it
  		return dir.delete();
  	}
  
  	public static FileReader fileReaderHard(String filename) {
  		try {
  			return new FileReader(filename);
  		} catch (FileNotFoundException e) {
  			e.printStackTrace();
  			System.exit(0);
  		}
  		throw new IllegalStateException();
  	}
  
  	public static String getPath(String parentPath, String childName) {
  		return new File(parentPath, childName).getPath();
  	}
  }
  