package org.dtk;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.zip.GZIPOutputStream;
public class FileUtil {
public static String readFromFile(String path, String encoding) throws IOException {
// summary: reads a file and returns a string
if (encoding == null) {
encoding = "utf-8";
}
File file = new File(path);
String lineSeparator = System.getProperty("line.separator");
BufferedReader input = new java.io.BufferedReader(
new InputStreamReader(new FileInputStream(file), encoding));
try {
StringBuffer stringBuffer = new StringBuffer();
String line = input.readLine();
// Byte Order Mark (BOM) - The Unicode Standard, version 3.0, page
// 324
// http://www.unicode.org/faq/utf_bom.html
// Note that when we use utf-8, the BOM should appear as "EF BB BF",
// but it doesn't due to this bug in the JDK:
// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4508058
if (line != null && line.length() > 0 && line.charAt(0) == 0xfeff) {
// Eat the BOM, since we've already found the encoding on this
// file,
// and we plan to concatenating this buffer with others; the BOM
// should
// only appear at the top of a file.
line = line.substring(1);
}
while (line != null) {
stringBuffer.append(line);
stringBuffer.append(lineSeparator);
line = input.readLine();
}
// Make sure we return a JavaScript string and not a Java string.
return stringBuffer.toString(); // String
} finally {
input.close();
}
}
public static void writeToFile(String path, String contents, String encoding, boolean useGzip) throws IOException {
// summary: writes a file
if (encoding == null) {
encoding = "utf-8";
}
File file = new File(path);
//Make sure destination dir exists.
File parentDir = file.getParentFile();
if(!parentDir.exists()){
if(!parentDir.mkdirs()){
throw new IOException("Could not create directory: " + parentDir.getAbsolutePath());
}
}
OutputStream outStream = new FileOutputStream(file);
if (useGzip) {
outStream = new GZIPOutputStream(outStream);
} else {
}
BufferedWriter output = new java.io.BufferedWriter(new OutputStreamWriter(outStream, encoding));
try {
output.append(contents);
} finally {
output.close();
}
}
}