All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.ebay.jetstream.util.FileUtils Maven / Gradle / Ivy

The newest version!
/*******************************************************************************
 *  Copyright © 2012-2015 eBay Software Foundation
 *  This program is dual licensed under the MIT and Apache 2.0 licenses.
 *  Please see LICENSE for more information.
 *******************************************************************************/
package com.ebay.jetstream.util;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.RandomAccessFile;

/**
 * File utility class
 */

public class FileUtils {
  public static void appendContentsTofile(String fileName, String contents) throws Exception {
	  RandomAccessFile file = null;
	 try{
		    file = new RandomAccessFile(fileName, "rw");
		    file.seek(file.length());
		    file.writeBytes(contents);
	 }finally{
		 if(file != null)
			 file.close();
	 }
  }

  public static String appendSlash(String s) {
    if (s == null) {
      return null;
    }

    s = s.trim();

    if (s.endsWith("/")) {
      return s;
    }
    else {
      return s + "/";
    }
  }

  /** byte-by-byte file comparison */
  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="OBL_UNSATISFIED_OBLIGATION")
  public static boolean bcmp(String fn1, String fn2) {
	FileInputStream f1 = null;
	FileInputStream f2 = null;
	
    try {
      boolean result = true;
      f1 = new FileInputStream(fn1);
      f2 = new FileInputStream(fn2);
      int b1, b2, offset = 0;
      while (true) {
        b1 = f1.read();
        b2 = f2.read();
        offset++;

        if (b1 != b2) {
          result = false;
        }
        if (b1 < 0 && b2 < 0) { // Both finished
          break;
        }
        else if (b1 < 0 || b2 < 0) { // One finished
          result = false;
          break;
        }
      }
      return result;

    }
    catch (Throwable e) {
      
    }finally{
    	try{
    	if(f1 != null)
    		f1.close();
    	if(f2 != null)
    		f2.close();
    	}catch(IOException ioe){}
    	
    }

    return false;

  } // End bcmp

  public static boolean checkFileExists(String fileName) {
    File f = new File(fileName);
    return f.exists();
  }

  /**
   * copy method from From E.R. Harold's book "Java I/O"
   */
  public static void copy(InputStream in, OutputStream out) throws IOException {
    // do not allow other threads to read from the
    // input or write to the output while copying is
    // taking place
    synchronized (in) {
      synchronized (out) {

        byte[] buffer = new byte[256];
        while (true) {
          int bytesRead = in.read(buffer);
          if (bytesRead == -1)
            break;
          out.write(buffer, 0, bytesRead);
        }
      }
    }
  }

  /**
   * Copy a text file
   */
  public static void copyFile(String src, String dst) throws Exception {
    BufferedReader inFile = null;
    PrintWriter outFile = null;
    String line;

    // Read in & Write out
    try{
	    inFile = new BufferedReader(new FileReader(src));
	    outFile = new PrintWriter(new FileOutputStream(dst));
	
	    while ((line = inFile.readLine()) != null)
	      outFile.println(line);
    }finally{
    	if(inFile != null)
    		inFile.close();
        if(outFile != null)
        	outFile.close();
    }
    

  }

  /**
   * Copy a binary file
   */
  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="OBL_UNSATISFIED_OBLIGATION")
  public static void cp(String src, String dst) throws Exception {
	 FileInputStream srcfis = new FileInputStream(src);
	 FileOutputStream dstfos = new FileOutputStream(dst);
		try {
			cpStream(srcfis, dstfos);
		} finally {
			if (srcfis != null)
				srcfis.close();
			if (dstfos != null)
				dstfos.close();
		}
  }

  public static void createFileAndWriteContents(String fileName, String contents) throws Exception {
    BufferedWriter writer = new BufferedWriter(new FileWriter(new File(fileName)));
    try{
    	writer.write(contents);
    }finally{
    	if(writer != null)
    		writer.close();
    }
    
  }

  /**
   * Create a directory path
   * 
   * @param path
   *            the path to create
   * @param mustCreate
   *            true iff the path cannot exist before
   * @throws IOException
   */
  public static void createPath(String path, boolean mustCreate) throws IOException {
    File fpath = new File(path);
    if (fpath.exists() && mustCreate)
      throw new IOException(path + " already exists");
    else if (!fpath.mkdirs())
      throw new IOException("cannot create path: " + path);
  }

  /**
   * Create a hierarchy of directories (a path) in the designated temp dir. If the JVM terminates normally, these will
   * be cleaned up.
   * 
   * @param path
   * @return
   * @throws IOException
   */
  public static File createTempPath(String path) throws IOException {
    String sep = File.separator;
    File tempDir = new File(System.getProperty("java.io.tmpdir") + sep + path);
    if (!tempDir.exists())
      if (!tempDir.mkdirs()) {
        boolean status = tempDir.delete();
        throw new IOException("creation failed for dir " + tempDir + "status = " + status);
      }
    tempDir.deleteOnExit();
    return tempDir;
  }

  public static boolean dirExists(String fName) {
    boolean result = false;

    File file = new File(fName);
    if (file != null) {
      result = file.exists() && file.isDirectory();
    }

    return result;

  }

  public static boolean emptyDir(String dirName) {
    boolean result = false;

    File dir = new File(dirName);
    if (dir != null && dir.isDirectory()) {
      File[] files = dir.listFiles();
      result = files.length == 0 ? true : false;
    }

    return result;

  }

  /**
   * Test if a file exists or not
   */
  public static boolean fileExists(String fName) {
    boolean result = false;

    File file = new File(fName);
    if (file != null) {
      result = file.exists() && file.isFile();
    }

    return result;

  }

  public static byte[] fileToByteArray(String fname) {
    File file = new File(fname);
    FileInputStream fis = null;

    try {
      fis = new FileInputStream(fname);
    }
    catch (FileNotFoundException e) {
      
      return null;
    }
   

    byte[] fileContents = new byte[(int) file.length()];

    int i = 0;

    while (true) {
      int data;
      try {
        data = fis.read();
      }
      catch (IOException e) {
              
        return null;
      }
      finally {
    	  if (fis != null)
			try {
				fis.close();
			} catch (IOException e) {
				//ignore
			}
      }

      if (data == -1)
        break;

      fileContents[i] = (byte) data;
    }
    return fileContents;
  }

  public static String readFile(String fileName, String newLine) throws IOException {
	  FileInputStream fis = new FileInputStream(fileName);
	  try{
		  return CommonUtils.getStreamAsString(fis, newLine);
	  }finally{
		  if(fis != null)
			  fis.close();
	  }
  }

  public static String readFileOrNull(String fileName) {
    try {
      return readFile(fileName, null);
    }
    catch (IOException e) {
    }
    return null;
  }

  public static void writeLine(BufferedWriter out, String line) throws Exception {
    out.write(line, 0, line.length());
    out.newLine();
  }

  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="REC_CATCH_EXCEPTION")
  public static boolean writeLine(String outFname, String line, boolean append) {
		BufferedWriter out = null;
		FileOutputStream fos = null;
		try {
			fos = new FileOutputStream(outFname, append);
			out = new BufferedWriter(new OutputStreamWriter(fos, "UTF8"));
			out.write(line, 0, line.length());
			out.newLine();
			return true;
		} catch (Exception e) {
			return false;
		} finally {
			try {
				if (out != null)
					out.close();
				if (fos != null)
					fos.close();
			} catch (IOException e) {
			}
		}
  }

  /**
   * @param src
   *            source file or directory
   * @param dst
   *            destination file or directory
   */
  public static void xcopy(String src, String dst) throws Exception {
    File s = new File(src), d = new File(dst);

    if (s.isDirectory()) {
      if (!d.mkdirs()) return;
      String files[] = s.list();

      for (int i = 0; i < files.length; i++) {
        xcopy(src + '/' + files[i], dst + '/' + files[i]);
      }
    }
    else if (s.isFile())
      cp(src, dst);

  }

  private static void cpStream(FileInputStream fis, FileOutputStream fos) throws IOException {
    byte[] buf = new byte[512];
    int len;
    BufferedInputStream bis = new BufferedInputStream(fis);
    BufferedOutputStream bos = new BufferedOutputStream(fos);
    while ((len = bis.read(buf)) != -1)
      bos.write(buf, 0, len);
    bos.flush();
  }

  private FileUtils() {
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy