Mega Code Archive

 
Categories / Java / File Input Output
 

Text file viewer

/*  * Copyright (c) 2004 David Flanagan.  All rights reserved.  * This code is from the book Java Examples in a Nutshell, 3nd Edition.  * It is provided AS-IS, WITHOUT ANY WARRANTY either expressed or implied.  * You may study, use, and modify it for any non-commercial purpose,  * including teaching and use in open-source projects.  * You may distribute it non-commercially as long as you retain this notice.  * For a commercial use license, or to purchase the book,   * please visit http://www.davidflanagan.com/javaexamples3.  */ import java.awt.Button; import java.awt.FileDialog; import java.awt.FlowLayout; import java.awt.Font; import java.awt.Frame; import java.awt.Panel; import java.awt.TextArea; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; import java.io.FileReader; import java.io.IOException; /**  * This class creates and displays a window containing a TextArea, in which the  * contents of a text file are displayed.  */ public class FileViewer extends Frame 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 frame     // Destroy the window when the user requests it     addWindowListener(new WindowAdapter() {       public void windowClosing(WindowEvent e) {         dispose();       }     });     // 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 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); // And a char stream to read it       char[] buffer = new char[4096]; // Read 4K characters at a time       int len; // How many chars read each time       textarea.setText(""); // Clear the text area       while ((len = in.read(buffer)) != -1) { // Read a batch of chars         String s = new String(buffer, 0, len); // Convert to a string         textarea.append(s); // And display them       }       this.setTitle("FileViewer: " + filename); // Set the window title       textarea.setCaretPosition(0); // Go to start of file     }     // Display messages if something goes wrong     catch (IOException e) {       textarea.setText(e.getClass().getName() + ": " + e.getMessage());       this.setTitle("FileViewer: " + filename + ": I/O Exception");     }     // Always be sure to close the input stream!     finally {       try {         if (in != null)           in.close();       } catch (IOException e) {       }     }   }   /**    * Handle button clicks    */   public void actionPerformed(ActionEvent e) {     String cmd = e.getActionCommand();     if (cmd.equals("open")) { // If user clicked "Open" button       // Create a file dialog box to prompt for a new file to display       FileDialog f = new FileDialog(this, "Open File", FileDialog.LOAD);       f.setDirectory(directory); // Set the default directory       // Display the dialog and wait for the user's response       f.show();       directory = f.getDirectory(); // Remember new default directory       setFile(directory, f.getFile()); // Load and display selection       f.dispose(); // Get rid of the dialog box     } else if (cmd.equals("close")) // If user clicked "Close" button       this.dispose(); // then close the window   }   /**    * The FileViewer can be used by other classes, or it can be used standalone    * with this main() method.    */   static public void main(String[] args) throws IOException {     // Create a FileViewer object     Frame f = new FileViewer((args.length == 1) ? args[0] : null);     // Arrange to exit when the FileViewer window closes     f.addWindowListener(new WindowAdapter() {       public void windowClosed(WindowEvent e) {         System.exit(0);       }     });     // And pop the window up     f.show();   } }