⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filetest.java

📁 Java 2实用编程百例,一些比较实用的J2SE小程序,可以通过这些程序熟悉JAVA基础知识
💻 JAVA
字号:
package ch02.section09;

import java.beans.*;
import java.io.*;
import java.net.*;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.filechooser.FileFilter;

public class FileTest
    extends JFrame {
  //用JFileChooser 对话框让用户选择文本文件,创建文本选择对话框
  JFileChooser chooser = new JFileChooser();
  TextPreviewer previewer = new TextPreviewer();
  JPanel previewPanel = new PreviewPanel();

  class PreviewPanel
      extends JPanel {
    public PreviewPanel() {
      JLabel label = new JLabel("Text Previewer",
                                SwingConstants.CENTER);
      setPreferredSize(new Dimension(250, 0));
      setBorder(BorderFactory.createEtchedBorder());
      setLayout(new BorderLayout());

      label.setBorder(BorderFactory.createEtchedBorder());
      add(label, BorderLayout.NORTH);
      add(previewer, BorderLayout.CENTER);
    }
  }

  public FileTest() {
    super("Accessory Components");
    //创建内容面板容器
    Container contentPane = getContentPane();
    JButton button = new JButton("Select A File");
    //设置组件布局方式为FlowLayout
    contentPane.setLayout(new FlowLayout());
    //加入打开文件按钮
    contentPane.add(button);
    chooser.setAccessory(previewPanel);
    //添加文件过滤器
    chooser.addChoosableFileFilter(new TextFilter());
    //为文本选择控件注册响应事件监听
    chooser.addPropertyChangeListener(
        new PropertyChangeListener() {
      public void propertyChange(PropertyChangeEvent e) {
        if (e.getPropertyName().equals(
            JFileChooser.SELECTED_FILE_CHANGED_PROPERTY)) {

          //修改文本区域的数据
          previewer.update( (File) e.getNewValue());
        }
      }
    });
    //为按钮注册响应事件监听
    button.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        //打开文本选择对话框
        chooser.showOpenDialog(null);
      }
    });
  }

  public static void main(String a[]) {
    JFrame f = new FileTest();
    f.setBounds(300, 300, 300, 75);
    //将面板显示出来
    f.setVisible(true);

    f.setDefaultCloseOperation(
        WindowConstants.DISPOSE_ON_CLOSE);
    //注册关闭窗口事件
    f.addWindowListener(new WindowAdapter() {
      public void windowClosed(WindowEvent e) {
        System.exit(0);
      }
    });
  }
}

class TextPreviewer
    extends JComponent {
  private ImageIcon icon;
  private JTextArea textArea = new JTextArea();

  public TextPreviewer() {
    setBorder(BorderFactory.createEtchedBorder());
    //设置组件布局方式
    setLayout(new BorderLayout());
    //将文本区域放入一个滚动面板中,在将这个滚动面板放在容器的中间
    add(new JScrollPane(textArea), BorderLayout.CENTER);
  }

  public void update(File file) {
    //通过文本区域将指定的文件内容显示出来
    textArea.setText(contentsOfFile(file));

    if (isShowing()) {
      textArea.revalidate();
    }
  }

  static String contentsOfFile(File file) {
    String s = new String();
    //一个字符数组,用于读取指定文件数据
    char[] buff = new char[50000];
    InputStream is;
    //一个字符输入流对象
    InputStreamReader reader;
    URL url;

    try {
      reader = new FileReader(file);

      int nch;

      while ( (
          //通过循环将指定的文件中数据赋值给一个字符串
          nch = reader.read(buff, 0, buff.length)) != -1) {
        s = s + new String(buff, 0, nch);
      }
    }
    catch (java.io.IOException ex) {
      s = "Could not load file";
    }
    //返回指定文件的数据
    return s;
  }
}

abstract class SuffixAwareFilter
    extends javax.swing.filechooser.FileFilter {
  public String getSuffix(File f) {
    String s = f.getPath(), suffix = null;
    int i = s.lastIndexOf('.');

    if (i > 0 && i < s.length() - 1) {
      suffix = s.substring(i + 1).toLowerCase();

    }
    return suffix;
  }

  public boolean accept(File f) {
    return f.isDirectory();
  }
}

/*
 *用于过滤打开文件类型
 */
class TextFilter
    extends SuffixAwareFilter {
  public boolean accept(File f) {
    String suffix = getSuffix(f);

    if (suffix != null) {

      //如果文件为指定类型,则返回true,表明可打开
      return super.accept(f) || suffix.equals("txt");
    }

    return false;
  }

  public String getDescription() {
    return "Text Files(*.txt)";
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -