/*******************************************************************************
* Copyright (c) 2006-2011 Gluster, Inc. <http://www.gluster.com>
* This file is part of Gluster Management Console.
*
* Gluster Management Console is free software; you can redistribute
* it and/or modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* Gluster Management Console is distributed in the hope that it
* will be useful, but WITHOUT ANY WARRANTY; without even the
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see
* <http://www.gnu.org/licenses/>.
*******************************************************************************/
package org.gluster.storage.management.core.utils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.UUID;
import org.gluster.storage.management.core.constants.CoreConstants;
import org.gluster.storage.management.core.exceptions.GlusterRuntimeException;
public class FileUtil {
public static String readFileAsString(File file) {
try {
return new String(readFileAsByteArray(file), CoreConstants.ENCODING_UTF8);
} catch (Exception e) {
e.printStackTrace();
throw new GlusterRuntimeException("Could not read file [" + file + "]", e);
}
}
public static byte[] readFileAsByteArray(File file) {
try {
FileInputStream fileInputStream = new FileInputStream(file);
byte[] data = new byte[fileInputStream.available()];
fileInputStream.read(data);
fileInputStream.close();
return data;
} catch (Exception e) {
throw new GlusterRuntimeException("Exception while reading file [" + file.getName() + "]: "
+ e.getMessage(), e);
}
}
public static void createTextFile(String fileName, String contents) {
try {
FileWriter writer = new FileWriter(fileName);
writer.write(contents);
writer.close();
} catch (Exception e) {
throw new GlusterRuntimeException("Exception while trying to create text file [" + fileName + "]", e);
}
}
public static String getTempDirName() {
return System.getProperty("java.io.tmpdir");
}
/**
* Create a new temporary directory. Use something like
* {@link #recursiveDelete(File)} to clean this directory up since it isn't
* deleted automatically
* @return the new directory
* @throws IOException if there is an error creating the temporary directory
*/
public static File createTempDir()
{
final File sysTempDir = new File(getTempDirName());
File newTempDir;
final int maxAttempts = 9;
int attemptCount = 0;
do
{
attemptCount++;
if(attemptCount > maxAttempts)
{
throw new GlusterRuntimeException(
"The highly improbable has occurred! Failed to " +
"create a unique temporary directory after " +
maxAttempts + " attempts.");
}
String dirName = UUID.randomUUID().toString();
newTempDir = new File(sysTempDir, dirName);
} while(newTempDir.exists());
if(newTempDir.mkdirs())
{
return newTempDir;
}
else
{
throw new GlusterRuntimeException(
"Failed to create temp dir named " +
newTempDir.getAbsolutePath());
}
}
/**
* Recursively delete file or directory
*
* @param fileOrDir
* the file or dir to delete
* @return true if all files are successfully deleted
*/
public static void recursiveDelete(File fileOrDir)
{
if(fileOrDir.isDirectory())
{
// recursively delete contents
for(File innerFile: fileOrDir.listFiles())
{
recursiveDelete(innerFile);
}
}
if(!fileOrDir.delete()) {
throw new GlusterRuntimeException("Couldn't delete file/directory [" + fileOrDir + "]");
}
}
public static void renameFile(String fromPath, String toPath) {
File fromFile = new File(fromPath);
File toFile = new File(toPath);
if(!fromFile.renameTo(toFile)) {
throw new GlusterRuntimeException("Couldn't rename [" + fromFile + "] to [" + toFile + "]");
}
}
}