Java写的浏览文件内容的窗体

来源:互联网 发布:吉诺比利总决赛数据 编辑:程序博客网 时间:2024/05/11 14:26

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

public class FileViewer extends Frame implements ActionListener
{
  String directory;
  TextArea textarea;

  public FileViewer()
  {
    this(null, null);
  }

  public FileViewer(String fileName)
  {
    this(null, fileName);
  }

  public FileViewer(String directory, String fileName)
  {
    super();
    addWindowListener(new WindowAdapter()
     {
       public void windowClosing(WindowEvent e)
       {
         dispose();
       }
     });
    textarea = new TextArea("", 24, 80);
    textarea.setFont(new Font("MonoSpaced", Font.PLAIN, 12));
    textarea.setEditable(false);
    this.add("Center", textarea);

    Panel p = new Panel();
    p.setLayout(new FlowLayout(FlowLayout.RIGHT, 10, 5));
    this.add(p, "South");

    Font font = new Font("SansSerif", Font.BOLD, 14);
    Button btOpenFile = new Button("Open File");
    Button btClose = new Button("Close");
    btOpenFile.addActionListener(this);
    btOpenFile.setActionCommand("open");
    btOpenFile.setFont(font);
    btClose.addActionListener(this);
    btClose.setActionCommand("close");
    btClose.setFont(font);
    p.add(btOpenFile);
    p.add(btClose);
    this.pack();
    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;
    setFile(directory, fileName);
  }

  public void setFile(String directory, String fileName)
  {
    if((fileName == null) || (fileName.length() == 0))
      return;
    File f;
    FileReader in = null;
    try
    {
      f = new File(directory, fileName);
      in = new FileReader(f);
      char[] buffer = new char[4096];
      int len;
      textarea.setText("");
      while((len = in.read(buffer)) != -1)
      {
        String s = new String(buffer, 0, len);
        textarea.append(s);
      }
      this.setTitle("FileViewer: " + fileName);
      textarea.setCaretPosition(0);
    }
    catch(IOException e)
    {
      textarea.setText(e.getClass().getName() + ": " + e.getMessage());
      this.setTitle("FileViewer: " + fileName + ": I/O Exception");
    }
    finally
    {
      try
      {
        if(in != null)
         in.close();
      }
      catch(IOException e)
      {}
    }
  }

  public void actionPerformed(ActionEvent e)
  {
    String cmd = e.getActionCommand();
    if(cmd.equals("open"))
    {
      FileDialog f = new FileDialog(this, "Open File", FileDialog.LOAD);
      f.setDirectory(directory);
      f.show();
      directory = f.getDirectory();
      setFile(directory, f.getFile());
      f.dispose();
    }
    else if(cmd.equals("close"))
      this.dispose();
  }

  public static void main(String[] args) throws IOException
  {
    Frame f = new FileViewer((args.length == 1) ? args[0] : null);
    f.addWindowListener(new WindowAdapter()
    {
      public void windowClosed(WindowEvent e)
      {
        System.exit(0);
      }
    });
    f.show();
  }
}