Text File Handler
/*
* Copyright (C) 2004,2005 Jack Park,
* mail : jackpark@thinkalong.com
*
* Part of <NexistGroup Objects>, an open source project.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
//package org.nex.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
import java.io.InputStreamReader;
import java.io.FileInputStream;
import java.io.ByteArrayOutputStream;
import java.io.PrintWriter;
import java.io.Reader;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.FileNotFoundException;
import javax.swing.JFileChooser;
import java.util.zip.*;
/**
* TextFileHandler.java
* General purpose Text File handler
* @author Jack Park
*/
/**
* FIXME: Errors should throw new RuntimeException
*/
public class TextFileHandler {
private String fName = null;
private String body = null;
private BufferedReader inStream = null;
private JFileChooser chooser = null;
public TextFileHandler() {
}
//////////////////////////////////////
// Directory services
// To use:
// First save:
// // caller gets a file e.g. to set a document name
// File newFile = handler._saveAs();
// // callser uses that file
// if (newFile != null)
// handler.writeFile(newFile, bodyString);
//////////////////////////////////////
public File _saveAs() {
File result = null;
if (chooser==null)chooser = new JFileChooser(new File("."));
int retVal = chooser.showSaveDialog(null);
if(retVal == JFileChooser.APPROVE_OPTION) {
result = chooser.getSelectedFile();
}
return result;
}
public void saveAs(String body) {
File myFile = _saveAs();
if (myFile != null) {
writeFile(myFile, body);
}
}
public File openFile() {
return openFile(null);
}
public File openFile(String title) {
File result = null;
JFileChooser chooser = new JFileChooser(new File("."));
if (title != null)
chooser.setDialogTitle(title);
int retVal = chooser.showOpenDialog(null);
if(retVal == JFileChooser.APPROVE_OPTION) {
result = chooser.getSelectedFile();
}
return result;
}
public File [] openFiles(String title) {
File [] result = null;
JFileChooser chooser = new JFileChooser(new File("."));
if (title != null)
chooser.setDialogTitle(title);
chooser.setMultiSelectionEnabled(true);
int retVal = chooser.showOpenDialog(null);
if(retVal == JFileChooser.APPROVE_OPTION) {
result = chooser.getSelectedFiles();
}
return result;
}
public File openDirectory() {
return openDirectory(null);
}
public File openDirectory(String title) {
File result = null;
JFileChooser chooser = new JFileChooser(new File("."));
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
if (title != null)
chooser.setDialogTitle(title);
int retVal = chooser.showOpenDialog(null);
if(retVal == JFileChooser.APPROVE_OPTION) {
result = chooser.getSelectedFile();
}
return result;
}
//////////////////////////////////////
// Simple File handlers
/////////////////////////////////////
public String readFile(String fileName) { // fully qualified name
File f = new File(fileName);
fName = fileName;
return readFile(f);
}
public String readFile(File f) {
int size = (int) f.length();
int bytesRead = 0 ;
body = null;
try {
FileInputStream in = new FileInputStream(f) ;
byte[] data = new byte[size] ;
in.read(data, 0, size);
body = new String(data) ;
in.close() ;
} catch (IOException e) {
System.out.println("Error: TextFileHandler couldn't read from " + f + "\n") ;
}
return body;
}
public String readFile16(File f) throws IOException {
StringBuilder sb = new StringBuilder();
String line;
Reader in = null;
try {
in = new InputStreamReader(new FileInputStream(f), "UTF-16");
BufferedReader reader = new BufferedReader(in);
while ((line = reader.readLine()) != null) {
sb.append(line).append("\n");
}
} finally {
in.close();
}
return sb.toString();
}
public void writeFile(String fileName, String inBody) {
File f = new File(fileName) ;
fName = fileName;
writeFile(f, inBody);
}
public void writeFile(File f, String inBody) {
// System.out.println("WRITING "+f);
int size = (int) inBody.length();
int bytesOut = 0 ;
byte data[] = inBody.getBytes(); //new byte[size] ;
// data = body.getBytes();
try {
FileOutputStream out = new FileOutputStream(f) ;
out.write(data, 0, size);
out.flush() ;
out.close() ;
}
catch (IOException e) {
System.out.println("Error: TextFileHandler couldn't write to " + fName + "\n");
}
}
//////////////////////////////////////
// Line-oriented File readers
/////////////////////////////////////
public String readFirstLine(String fileName) {
File f = new File(fileName);
return readFirstLine(f);
}
public String readFirstLine(File f) {
fName = f.getName();
try {
FileInputStream in = new FileInputStream(f);
inStream = new BufferedReader(new InputStreamReader(in));
} catch (IOException e) {
System.out.println("Error: TextFileHandler couldn't open a DataInputStream on " + fName + "\n");
}
return readNextLine();
}
/**
* Read a line from an open file
* Return null when done
*/
public String readNextLine() {
String str = null;
try {
str = inStream.readLine();
} catch (IOException e) {
System.out.println("Error: TextFileHandler couldn't read from " + fName + "\n");
}
return str;
}
////////////////////////////////////////////
// Serialized Java Class utilities
////////////////////////////////////////////
public void persist(String fileName, Object obj) {
try {
new ObjectOutputStream(
new FileOutputStream(new File(fileName))).writeObject(obj);
} catch (Exception e) {
// e.printStackTrace();
throw new RuntimeException(e);
}
}
public Object restore(String fileName) {
Object result = null;
try {
result = new ObjectInputStream(
new FileInputStream(new File(fileName))).readObject();
}
catch (Exception e) {
// e.printStackTrace();
System.out.println("Restoring "+fileName);
// e.printStackTrace();
// throw new RuntimeException("Failed");
}
return result;
}
////////////////////////////////////////////
// GZip utilities
////////////////////////////////////////////
/**
* Save content to a .gz file
* @param fileName e.g. foo.txt.gz
* @param content
*/
public void saveGZipFile(String fileName, String content) {
try {
GZIPOutputStream out = new GZIPOutputStream(new FileOutputStream(fileName));
PrintWriter pw = new PrintWriter(out);
pw.write(content);
pw.flush();
pw.close();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
public PrintWriter getGZipWriter(String fileName) throws Exception {
GZIPOutputStream out = new GZIPOutputStream(new FileOutputStream(fileName));
return new PrintWriter(out);
}
public void saveGZipFile(File outFile, String content) throws Exception{
GZIPOutputStream out = new GZIPOutputStream(new FileOutputStream(outFile));
PrintWriter pw = new PrintWriter(out);
pw.write(content);
pw.flush();
pw.close();
}
/**
* Retrieve a String from a .gz file
* @param fileName e.g. bar.xml.gz
* @return
*/
public String openGZipFile(String fileName) {
try {
GZIPInputStream in = new GZIPInputStream(new FileInputStream(
fileName));
StringBuffer buf = new StringBuffer();
byte [] b = new byte[1024];
int length;
while ((length = in.read(b)) > 0) {
String s = new String(b);
buf.append(s);
}
return buf.toString().trim();
} catch (Exception e) {
System.out.println(e.getMessage());
}
return null;
}
}
/**
ChangeLog
20020512 JP: minor fix in readFile
**/
Related examples in the same category