alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

What this is

This file is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Tags/keywords

bufferedreader, file, filenotfoundexception, filereader, fileutil, io, ioexception, string, stringbuffer

The source code

/* ***** BEGIN LICENSE BLOCK *****
 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is the reusable ccl java library
 * (http://www.kclee.com/clemens/java/ccl/).
 *
 * The Initial Developer of the Original Code is
 * Chr. Clemens Lee.
 * Portions created by Chr. Clemens Lee are Copyright (C) 2002
 * Chr. Clemens Lee. All Rights Reserved.
 *
 * Contributor(s): Chr. Clemens Lee <clemens@kclee.com>
 *
 * Alternatively, the contents of this file may be used under the terms of
 * either the GNU General Public License Version 2 or later (the "GPL"), or
 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
 * in which case the provisions of the GPL or the LGPL are applicable instead
 * of those above. If you wish to allow use of your version of this file only
 * under the terms of either the GPL or the LGPL, and not to allow others to
 * use your version of this file under the terms of the MPL, indicate your
 * decision by deleting the provisions above and replace them with the notice
 * and other provisions required by the GPL or the LGPL. If you do not delete
 * the provisions above, a recipient may use your version of this file under
 * the terms of any one of the MPL, the GPL or the LGPL.
 *
 * ***** END LICENSE BLOCK ***** */

package net.sourceforge.cobertura.javancss;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

/**
 * Utility class for file operations.<p>
 *
 * Simple but most commonly used methods of this class are:<br>
 * - {@link #readFile(java.lang.String) readFile}<br>
 * - {@link #concatPath(java.lang.String, java.lang.String) concatPath}<br>
 *
 * Other less frequently used but still handy methods are:<br>
 * - {@link #normalizeFileName(java.lang.String) normalizeFileName} to take the current user directory into account via the 'user.dir' system property<br>
 *
 * @version  $Id: FileUtil.java 384 2006-03-17 20:10:49Z thekingant $
 * @author <a href="http://www.kclee.com/clemens/">
 *         Chr. Clemens Lee</a>
 *         <<a href="mailto:clemens@kclee.com">
 *         clemens@kclee.com
 *         </a>>
 */
public class FileUtil
{

	/**
	 * Utility class which should never instanciate itself.
	 */
	private FileUtil()
	{
		super();
	}

	/**
	 * Concatenates a file path with the file name. If 
	 * necessary it adds a File.separator between the path
	 * and file name. For example "/home" or "/home/" and "clemens" both
	 * become "/home/clemens".<p>
	 *
	 * This method is inspired from the FrIJDE project out
	 * of the gCollins.File.FileTools class.<p>
	 *
	 * FrIJDE Homepage:
	 * http://amber.wpi.edu/~thethe/Document/Besiex/Java/FrIJDE/
	 *
	 * @param    sPath_   a directory path. Is not allowed to be null.
	 * @param    sFile_   the base name of a file.
	 *
	 * @return            sPath_ if sFile_ is empty.
	 */
	private static String concatPath(String sPath_, String sFile_)
	{
		Util.panicIf(sPath_ == null);
		//System.out.println("ccl.util.FileUtil.concatPath(..).sPath_: --->" + sPath_ + "<---");
		//System.out.println("ccl.util.FileUtil.concatPath(..).sFile_: " + sFile_);

		String sRetVal = sPath_;

		if (!Util.isEmpty(sFile_))
		{
			if (sPath_.length() > 0 && !sPath_.endsWith(File.separator))
			{
				sRetVal += File.separator;
			}

			sRetVal += sFile_;
		}

		return sRetVal;
	}

	/**
	 * Reads a File and returns the content in a String.
	 * CRLF -> LF conversion takes place. This is a convenience method so you don't
	 * need to bother creating a file reader object and closing it after it has
	 * been used.
	 *
	 * @param    sFileName_   the name of the file to read.
	 *
	 * @return                a string with the content of the file but without 
	 *                        any CR characters.
	 *
	 * @throws   FileNotFoundException   if file does not exist.
	 * @throws   IOException             if any file operation fails.
	 */
	public static String readFile(String sFileName_) throws IOException, FileNotFoundException
	{
		StringBuffer sFileContent = new StringBuffer(100000);

		try
		{
			FileReader frIni = new FileReader(sFileName_);
			if (frIni != null)
			{
				BufferedReader brIni = new BufferedReader(frIni);
				if (brIni != null)
				{
					while (brIni.ready())
					{
						String sLine = brIni.readLine();
						if (sLine == null)
						{
							break;
						}
						sFileContent.append(sLine).append('\n');
					}
					brIni.close();
				}
				frIni.close();
			}
		}
		catch (FileNotFoundException fileNotFoundException)
		{
			throw new FileNotFoundException("No such file: '" + sFileName_ + "'");
		}

		return sFileContent.toString();
	}

	/**
	 * @return It's the canonical path of sFileName_.
	 */
	private static String getAbsoluteFileName(String sFileName_)
	{
		String sRetVal = null;

		try
		{
			File pFile = new File(sFileName_);
			sRetVal = pFile.getCanonicalPath();
		}
		catch (Exception e)
		{
			return null;
		}

		return sRetVal;
	}

	/**
	 * This method returns an absolute (canonical)
	 * file name. The difference to getAbsoluteFileName
	 * is that this method uses the system property
	 * "user.dir" instead of the native system's current 
	 * directory. This way you get a chance of changing
	 * the current directory inside Java and let your 
	 * program reflect that change.
	 */
	public static String normalizeFileName(String sFile)
	{
		return normalizeFileName(sFile, (String)System.getProperties().get("user.dir"));
	}

	/**
	 * This method returns an absolute (canonical)
	 * file name. The difference to getAbsoluteFileName
	 * is that this method uses the system property
	 * sUserDir instead of the native system's current 
	 * directory. This way you get a chance of changing
	 * the current directory inside Java and let your 
	 * program reflect that change.
	 */
	private static String normalizeFileName(String sFile, String sUserDir)
	{
		sFile = sFile.trim();
		if (Util.isEmpty(sFile) || sFile.equals("."))
		{
			sFile = sUserDir;
		}
		else if (!FileUtil.isAbsolute(sFile))
		{
			sFile = FileUtil.concatPath(sUserDir, sFile);
		}
		sFile = FileUtil.getAbsoluteFileName(sFile);

		return sFile;
	}

	/**
	 * Tests if the file represented by this File object is an absolute 
	 * pathname. The definition of an absolute pathname is system
	 * dependent. For example, on UNIX, a pathname is absolute if its first
	 * character is the separator character. On Windows
	 * platforms, a pathname is absolute if its first character is an 
	 * ASCII '\' or '/', or if it begins with a letter followed by a colon. 
	 */
	private static boolean isAbsolute(String sFileName_)
	{
		return new File(sFileName_).isAbsolute();
	}

}
... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.