📄 filemanagerjframe.java.bak
字号:
//【例9.8】 文件管理器和文本文件编辑器。
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class FileManagerJFrame extends JFrame implements ActionListener//, FilenameFilter
{
private File dir; //文件对象,表示指定目录
private File[] files; //保存指定目录中所有文件
private JTextField text_dir; //地址栏,显示目录路径
private JList list_files; //列表框,显示指定目录中所有文件和子目录
public FileManagerJFrame()
{
super("文件管理器");
this.setSize(400,300);
this.setLocation(200,140);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.dir = new File(".",""); //创建表示当前目录的文件对象
this.text_dir = new JTextField(this.dir.getAbsolutePath()); //显示目录路径
this.add(this.text_dir,"North");
this.text_dir.addActionListener(this);
this.files = this.dir.listFiles(); //返回指定目录中所有文件对象
String[] filenames = this.dir.list(); //返回指定目录中所有文件名字符串
this.list_files = new JList(filenames); //所有文件名字符串显示在列表框中
this.add(this.list_files);
this.addMenu(); //调用自定义方法,添加菜单
this.setVisible(true);
}
private void addMenu() //添加主菜单
{
JMenuBar menubar = new JMenuBar(); //菜单栏
this.setJMenuBar(menubar); //框架上添加菜单栏
JMenu menu_file = new JMenu("文件"); //菜单
menubar.add(menu_file); //菜单栏中加入菜单
JMenuItem menuitem_open = new JMenuItem("打开"); //创建菜单项
menu_file.add(menuitem_open); //菜单项加入到菜单
menuitem_open.addActionListener(this); //为菜单项注册单击事件监听器
JMenuItem menuitem_sendto = new JMenuItem("复制到C:\\备份");
menu_file.add(menuitem_sendto);
menuitem_sendto.addActionListener(this);
JMenuItem menuitem_delete = new JMenuItem("删除");
menu_file.add(menuitem_delete);
menuitem_delete.addActionListener(this);
}
public static void copyFile(File file, File file2) //复制文件,适用于任意类型文件
{ //将file文件内容复制file文件中,重写方式
try
{
FileInputStream fin = new FileInputStream(file); //创建文件输入流对象
FileOutputStream fout = new FileOutputStream(file2); //创建文件输出流对象
byte[] buffer = new byte[512]; //字节缓冲区
int count=0;
do
{
count = fin.read(buffer); //读取输入流
if (count != -1)
fout.write(buffer); //写入输出流
}while (count!=-1);
fin.close(); //关闭输入流
fout.close(); //关闭输出流
file2.setLastModified(file.lastModified()); //将新文件的修改时间设置为原文件的修改时间
}
catch (IOException ioex)
{
System.out.println("复制 "+file.getName()+" 文件未成功。");
return;
}
}
/*
public boolean accept(File dir, String filename)
{
filename = filename.toLowerCase();
return (filename.startsWith(this.prefix)) & (filename.endsWith(this.extend));
}
*/
public void actionPerformed(ActionEvent e) //单击事件处理程序
{
if(e.getSource()==this.text_dir) //单击文本行时
{
this.dir = new File(this.text_dir.getText());
this.files = this.dir.listFiles();
String[] filenames = this.dir.list();
this.list_files.setListData(filenames); //重新设置列表框中的数据项
}
if(e.getActionCommand()=="打开") //单击菜单项时
{
int i = this.list_files.getSelectedIndex(); //返回列表框第1个选中数据项的序号,从0开始;没有选中时返回-1
if (i!=-1)
if (this.files[i].isFile())
{
String fname = (String)this.list_files.getSelectedValue(); //返回列表框第1个选中数据项的值;没有选中时返回null
int j = fname.indexOf('.');
if (j>0)
{
String extend = fname.substring(j+1); //获得.之后的扩展名字符串
if (extend.equals("txt") || extend.equals("java"))
new TextFileEditorJFrame(this.files[i]); //打开文本文件编辑器
else
System.out.println("运行错误:不能打开这种类型文件。");
}
}
else
{
this.dir = this.files[i];
this.files = this.dir.listFiles();
String[] filenames = this.dir.list();
this.list_files.setListData(filenames);
}
}
if(e.getActionCommand()=="复制到C:\\备份")
{
int i = this.list_files.getSelectedIndex();
if (i!=-1 && this.files[i].isFile()) //仅复制文件,不复制目录
{
File dir_copyto = new File("C:\\备份",""); //指定复制到的目录
if (!dir_copyto.exists()) //目录不存在时
{
dir_copyto.mkdir(); //创建目录
File f2 = new File(dir_copyto, this.files[i].getName());
this.copyFile(this.files[i], f2); //复制文件
}
else //目录存在时
{
File f2 = new File(dir_copyto, this.files[i].getName());
if (!f2.exists()) //文件不存在时
this.copyFile(this.files[i], f2);
else //文件存在时
if (this.files[i].lastModified() > f2.lastModified())
this.copyFile(this.files[i], f2); //待复制文件日期较新时复制
}
}
}
if(e.getActionCommand()=="删除")
{
int i = this.list_files.getSelectedIndex();
if (i!=-1)
{
this.files[i].delete(); //删除文件
String[] filenames = this.dir.list();
this.list_files.setListData(filenames);
}
}
}
public static void main(String arg[])
{
new FileManagerJFrame();
}
}
/*
程序设计说明如下。
1、 复制文件时未询问,拟写询问对话框如下,未完成。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm");
String askstr = f2.getName()+"文件已存在。是否需要覆盖?\r\n";
askstr += "现有文件长度为 "+f2.length()+"B,修改时间为"+sdf.format(new Date(f2.lastModified())))+"\r\n";
askstr += "替换文件长度为 "+this.files[i].length()+"B,修改时间为"+sdf.format(new Date(this.files[i].lastModified())))+"\r\n";
JDialog dialog = new JDialog(this,"询问");
dialog.setSize(240,80);
dialog.add(new JLabel(askstr,JLabel.CENTER));
dialog.
dialog.setDefaultCloseOperation(EXIT_ON_CLOSE);
2、删除文件未询问。
3、删除非空目录,需要删除指定目录及其中所有文件和子目录,未完成。
4、弹出式菜单未完成,部分程序如下。
private void addPopupMenu() //添加主菜单、弹出式菜单、对话框
{
JPopupMenu popupmenu = new JPopupMenu(); //弹出式菜单对象
JMenuItem menuitem_open = new JMenuItem("打开"); //生成菜单项
menuitem_open.addActionListener(this); //为菜单项注册单击事件监听器
popupmenu.add(menuitem_open); //加入剪切菜单项//菜单项加入到菜单
JMenuItem menuitem_sendto = new JMenuItem("发送到");
menuitem_sendto.addActionListener(this);
popupmenu.add(menuitem_sendto);
this.list_files.add(popupmenu); //文本区添加弹出式菜单
}
5、"查看 | 向上一级"菜单未完成,程序如下。
JMenu menu_view = new JMenu("查看");
menubar.add(menu_view);
JMenuItem menuitem_up = new JMenuItem("向上一级");
menu_view.add(menuitem_up);
menuitem_up.addActionListener(this);
if(e.getActionCommand()=="向上一级")//??
{
this.dir = new File("../", this.dir.getName());
this.text_dir.setText(this.dir.getAbsolutePath()); //显示目录路径
files = this.dir.listFiles(); //返回指定目录中所有文件对象
String[] filenames = this.dir.list();
this.list_files.setListData(filenames); //重新设置列表框中的数据项
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -