// Copyright (C) 2003-2009 by Object Mentor, Inc. All rights reserved.
// Released under the terms of the CPL Common Public License version 1.0.
package util;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.Closeable;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
import java.util.SortedSet;
import java.util.TreeSet;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Pattern;
public class FileUtil {
private static final Logger LOG = Logger.getLogger(FileUtil.class.getName());
public static final String CHARENCODING = "UTF-8";
public static File createFile(String path, String content) throws IOException {
return createFile(path, new ByteArrayInputStream(content.getBytes()));
}
public static File createFile(String path, InputStream content) throws IOException {
String[] names = path.replace("/", File.separator).split(Pattern.quote(File.separator));
if (names.length == 1)
return createFile(new File(path), content);
else {
File parent = null;
for (int i = 0; i < names.length - 1; i++) {
parent = parent == null ? new File(names[i]) : new File(parent, names[i]);
if (!parent.exists())
parent.mkdir();
}
File fileToCreate = new File(parent, names[names.length - 1]);
return createFile(fileToCreate, content);
}
}
public static File createFile(File file, String content) throws IOException {
return createFile(file, content.getBytes(CHARENCODING));
}
public static File createFile(File file, byte[] bytes) throws IOException {
return createFile(file, new ByteArrayInputStream(bytes));
}
public static File createFile(File file, InputStream content) throws IOException {
FileOutputStream fileOutput = null;
try {
fileOutput = new FileOutputStream(file);
FileUtil.copyBytes(content, fileOutput);
}
finally {
if (fileOutput != null)
try {
fileOutput.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return file;
}
public static boolean makeDir(String path) {
return new File(path).mkdir();
}
public static void deleteFileSystemDirectory(String dirPath) throws IOException {
deleteFileSystemDirectory(new File(dirPath));
}
public static void deleteFileSystemDirectory(File current) throws IOException {
File[] files = current.listFiles();
for (int i = 0; files != null && i < files.length; i++) {
File file = files[i];
if (file.isDirectory())
deleteFileSystemDirectory(file);
else
deleteFile(file);
}
deleteFile(current);
}
public static void deleteFile(String filename) throws IOException {
deleteFile(new File(filename));
}
public static void deleteFile(File file) throws IOException{
if (!file.exists())
return;
if (!file.delete())
throw new IOException("Could not delete '" + file.getAbsolutePath() + "'");
}
public static String getFileContent(String path) throws IOException {
File input = new File(path);
return getFileContent(input);
}
public static String getFileContent(File input) throws IOException {
return new String(getFileBytes(input), CHARENCODING);
}
public static byte[] getFileBytes(File input) throws IOException {
long size = input.length();
FileInputStream stream = null;
try {
stream = new FileInputStream(input);
return new StreamReader(stream).readBytes((int) size);
} finally {
close(stream);
}
}
public static LinkedList<String> getFileLines(File file) throws IOException {
LinkedList<String> lines = new LinkedList<>();
BufferedReader reader = new BufferedReader(new FileReader(file));
String line;
try {
while ((line = reader.readLine()) != null)
lines.add(line);
} finally {
close(reader);
}
return lines;
}
public static void writeLinesToFile(File file, List<String> lines) throws FileNotFoundException {
PrintStream output = new PrintStream(new FileOutputStream(file));
for (String line : lines) {
output.println(line);
}
output.close();
}
public static void copyBytes(InputStream input, OutputStream output) throws IOException {
StreamReader reader = new StreamReader(input);
while (!reader.isEof())
output.write(reader.readBytes(1000));
}
public static String toString(InputStream input) throws IOException {
String result = "";
Scanner s = new Scanner(input, CHARENCODING);
s.useDelimiter("\\A");
result = s.hasNext() ? s.next() : "";
s.close();
return result;
}
public static File createDir(String path) {
makeDir(path);
return new File(path);
}
public static File[] getDirectoryListing(File dir) {
SortedSet<File> dirSet = new TreeSet<>();
SortedSet<File> fileSet = new TreeSet<>();
File[] files = dir.listFiles();
if (files == null)
return new File[0];
for (File file : files) {
if (file.isDirectory())
dirSet.add(file);
else
fileSet.add(file);
}
List<File> fileList = new LinkedList<>();
fileList.addAll(dirSet);
fileList.addAll(fileSet);
return fileList.toArray(new File[fileList.size()]);
}
public static void close(Closeable closeable) {
if (closeable != null) {
try {
closeable.close();
} catch (IOException e) {
LOG.log(Level.INFO, "Unable to close " + closeable, e);
}
}
}
}