📄 filelister.java
字号:
import java.awt.*;import java.awt.event.*;import java.io.*;import java.text.DateFormat;import java.util.Date;public class FileLister extends Frame implements ActionListener, ItemListener { //创建程序所需的组件 List list; TextField details; Panel buttons; Button up, close; File currentDir; FilenameFilter filter; String[] files; //设定日期格式 DateFormat dateFormatter = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT); //构造方法 public FileLister(String directory, FilenameFilter filter) { super("文件信息获取"); this.filter = filter; //使窗口上的关闭按钮生效 addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { dispose(); } }); //创建列表并添加监视器 list = new List(12, false); list.addActionListener(this); list.addItemListener(this); //创建文本框并使其不能编辑,只用来显示信息 details = new TextField(); details.setEditable(false); //创建按钮,并添加监视器 buttons = new Panel(); buttons.setLayout(new FlowLayout(FlowLayout.RIGHT, 15, 5)); up = new Button("上一级目录"); close = new Button("关闭"); up.addActionListener(this); close.addActionListener(this); buttons.add(up); buttons.add(close); //将组件加入应用程序 this.add(list, "Center"); this.add(details, "North"); this.add(buttons, "South"); this.setSize(500, 350); listDirectory(directory); } public void listDirectory(String directory) { File dir = new File(directory); if (!dir.isDirectory()) //如果文件指定的路径不存在,则抛出异常 throw new IllegalArgumentException("文件信息列表: 没有这个路径"); //将路径下的文件名称保存起来,并对其排序 files = dir.list(filter); java.util.Arrays.sort(files); list.removeAll(); list.add("[上一级目录]"); for(int i = 0; i < files.length; i++) list.add(files[i]); this.setTitle(directory); details.setText(directory); currentDir = dir; } public void itemStateChanged(ItemEvent e) { int i = list.getSelectedIndex() - 1; if (i < 0) return; //取得文件名称 String filename = files[i]; File f = new File(currentDir, filename); if (!f.exists()) throw new IllegalArgumentException("没有这个文件"); //编辑文件信息,这是本程序的关键所在 String info = filename; if (f.isDirectory()) info += File.separator; info += " " + f.length() + " 字节 "; info += dateFormatter.format(new java.util.Date(f.lastModified())); if (f.canRead()) info += " 可读"; if (f.canWrite()) info += " 可写"; details.setText(info); } public void actionPerformed(ActionEvent e) { if (e.getSource() == close) this.dispose(); else if (e.getSource() == up) { up(); } else if (e.getSource() == list) { int i = list.getSelectedIndex(); if (i == 0) up(); else { String name = files[i-1]; File f = new File(currentDir, name); String fullname = f.getAbsolutePath(); if (f.isDirectory()) listDirectory(fullname); } } } protected void up() { //获得上一级目录名称,并转到上一级目录 String parent = currentDir.getParent(); if (parent == null) return; listDirectory(parent); } public static void main(String args[]) throws IOException { FileLister f; FilenameFilter filter = null; String directory = null; if (directory == null) directory = System.getProperty("user.dir"); //创建文件信息列表对象,并显示它 f = new FileLister(directory, filter); f.show(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -