TextFileHandler.java Source code

Java tutorial

Introduction

Here is the source code for TextFileHandler.java

Source

/*
 *  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
**/