FileDocCategorySizeDatePackage
FileViewer.javaAPI DocExample3453Sat Jun 02 02:41:16 BST 2001None

FileViewer.java

// This example is from _Java Examples in a Nutshell_. (http://www.oreilly.com)
// Copyright (c) 1997 by David Flanagan
// This example is provided WITHOUT ANY WARRANTY either expressed or implied.
// You may study, use, modify, and distribute it for non-commercial purposes.
// For any commercial use, see http://www.davidflanagan.com/javaexamples

import java.awt.*;
import java.awt.event.*;
import java.io.*;

/**
 * This class creates and displays a window containing a TextArea, 
 * in which the contents of a text file are displayed.
 **/
public class FileViewer extends CloseableFrame implements ActionListener {
  String directory;  // The default directory to display in the FileDialog
  TextArea textarea; // The area to display the file contents into 

  /** Convenience constructor: file viewer starts out blank */
  public FileViewer() { this(null, null); }
  /** Convenience constructor: display file from current directory */
  public FileViewer(String filename) { this(null, filename); }

  /**
   * The real constructor.  Create a FileViewer object to display the
   * specified file from the specified directory 
   **/
  public FileViewer(String directory, String filename) {
    super();  // Create the (closeable) frame
    
    // Create a TextArea to display the contents of the file in
    textarea = new TextArea("", 24, 80);
    textarea.setFont(new Font("MonoSpaced", Font.PLAIN, 12));
    textarea.setEditable(false);
    this.add("Center", textarea);
    
    // Create a bottom panel to hold a couple of buttons in
    Panel p = new Panel();
    p.setLayout(new FlowLayout(FlowLayout.RIGHT, 10, 5));
    this.add(p, "South");

    // Create the buttons and arrange to handle button clicks
    Font font = new Font("SansSerif", Font.BOLD, 14);
    Button openfile = new Button("Open File");
    Button close = new Button("Close");
    openfile.addActionListener(this);
    openfile.setActionCommand("open");
    openfile.setFont(font);
    close.addActionListener(this);
    close.setActionCommand("close");
    close.setFont(font);
    p.add(openfile);
    p.add(close);

    this.pack();

    // Figure out the directory, from filename or current dir, if necessary
    if (directory == null) {
      File f;
      if ((filename != null) && (f = new File(filename)).isAbsolute()) {
        directory = f.getParent();
        filename = f.getName();
      }
      else directory = System.getProperty("user.dir");
    }

    this.directory = directory;    // Remember the directory, for FileDialog
    setFile(directory, filename);  // Now load and display the file
  }
  
  /**
   * Load and display the specified file (if any) from the specified directory
   **/
  public void setFile(String directory, String filename) {
    if ((filename == null) || (filename.length() == 0)) return;
    File f;
    FileReader in = null;
    // Read and display the file contents.  Since we're reading text, we
    // use a FileReader instead of a FileInputStream.
    try {
      f = new File(directory, filename); // Create a file object
      in = new FileReader(f);            // Create a char stream to read  it
      int size = (int) f.length();       // Check file size
      char[] data = new char[size];      // Allocate an array big enough for it
      int chars_read = 0;                // How many chars read so far?
      while(chars_read