package org.filemanagerjframe;import java.io.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.JFrame;import org.textfileeditorjframe.TextFileEditorJFrame;public class FileManagerJFrame extends JFrame implements ActionListener {
/**
*
*/
private static final long serialVersionUID = 434629409248706625L;
private File dir; //文件对象,表示指定目录
private File files[];//保存指定目录的所有文件
private JTextField text;//地址栏,显示目录路径
private JList jlist; //列表框,显示指定目录中的所有文件和子目录
public FileManagerJFrame()
{
super("文件管理器");
this.setBounds(300,200,600,480);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.dir = new File(".",""); //创建表示当前目录的文件对象
this.text = new JTextField(this.dir.getAbsolutePath()); //显示目录路径
this.getContentPane().add(this.text,"North");
this.text.addActionListener(this);
this.files =this.dir.listFiles(); //返回指定目录中所有文件对象
String filenames[] = this.dir.list();//返回指定目录中所有文件名字符串
this.jlist = new JList(filenames); //所有文件名字符串显示在列表框中
this.getContentPane().add(this.jlist);
JMenuBar menubar = new JMenuBar();
this.setJMenuBar(menubar); //菜单栏添加到框架窗口
String menustr[] = {"文件","编辑","查看","帮助"}; //以下创建菜单,添加到菜单栏中
JMenu menu[] = new JMenu[menustr.length];
for(int i=0;i<menu.length;i++)
{
menu[i] = new JMenu(menustr[i]); //创建菜单
menubar.add(menu[i]);
}
JMenu menu_new = new JMenu("新建");
menu[0].add(menu_new); //"新建"菜单是“文件”菜单的子菜单
String menuitemstr_new[] = {"文件夹","文本文档"}; //以下是创建菜单项,添加到“新建”菜单
JMenuItem menuitem_new[] = new JMenuItem[menuitemstr_new.length];
for(int i=0;i<menuitem_new.length;i++)
{
menuitem_new[i] = new JMenuItem(menuitemstr_new[i]); //创建菜单项
menu_new.add(menuitem_new[i]); //为菜单项加入到菜单
menuitem_new[i].addActionListener(this);//为菜单项注册单击监听事件
}
String menuitemstr_file[]={"打开","重命名","删除"}; //以下创建菜单选项,添加到“文件”菜单的子菜单
JMenuItem menuitem_file[] =new JMenuItem[menuitemstr_file.length];
for(int i=0;i<menuitem_file.length;i++)
{
menuitem_file[i]=new JMenuItem(menuitemstr_file[i]); //创建菜单项
menu[0].add(menuitemstr_file[i]); //菜单项加入到菜单
menuitem_file[i].addActionListener(this); //为菜单项注册单击事件监听器
}
//以下创建菜单项,添加到“编辑”菜单
String menuitemstr_edit[] = {"剪切","复制","粘贴","复制到备份文件夹"};
JMenuItem menuitem_edit[] = new JMenuItem[menuitemstr_edit.length];
for(int i=0;i<menuitem_edit.length;i++)
{
menuitem_edit[i] = new JMenuItem(menuitemstr_edit[i]);
menu[1].add(menuitem_edit[i]);
menuitem_edit[i].addActionListener(this);
}
JMenuItem menuitem_up = new JMenuItem("返回上级");//创建菜单项,添加到“查看”菜单
menu[2].add(menuitem_up);
menuitem_up.addActionListener(this);
this.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==this.text) //单击文本行
this.dir = new File(this.text.getText()); //进入指定文件夹
if(e.getActionCommand()=="返回上级")
this.dir = this.dir.getParentFile();
if(e.getActionCommand()=="文件夹")
new File(this.dir,"新建文件夹").mkdir();
if(e.getActionCommand()=="文本文档")
try
{
new File(this.dir,"新建文本文档.txt").createNewFile();
}
catch(IOException ioe)
{
}
int i=this.jlist.getSelectedIndex();
//返回列表框第一个选中数据项的序号,从0开始:没有选中时返回-1
if(e.getActionCommand()=="重命名" &&i!=-1) //单击“文件 重命名”菜单项
{
String filename = JOptionPane.showInputDialog(this,"文件名");
if(filename!=null && filename!="")
{
if(this.files[i].isFile() && !(filename.endsWith(".txt")||filename.endsWith(".TXT")))
filename +=".txt";
this.files[i].renameTo(new File(this.dir,filename));
}
}
if(e.getActionCommand()=="打开" &&i!=-1)
if(this.files[i].isFile())
{
String fname = (String)this.jlist.getSelectedValue();
int j=fname.lastIndexOf('.');
if(j>0)
{
String extend = fname.substring(j+1); //获得“.” 之后扩展名字字符串
if(extend.equals("txt")||extend.equals("java"))
new TextFileEditorJFrame(this.files[i]);//打开文本编辑器
else
JOptionPane.showMessageDialog(this,"运行错误,不能打开这种类型文件");
}
}
else //显示选中目录的文件列表
{
this.dir = this.files[i];
this.text.setText(this.dir.getAbsolutePath());
}
if(e.getActionCommand()=="删除"&&i!=-1) //当前是文件,不复制目录
if(this.files[i].isFile())
{
if(JOptionPane.showConfirmDialog(this, "删除\""+this.files[i].getName()+"\"文件?")==0)
this.files[i].delete(); //删除文件 }
else
if(JOptionPane.showConfirmDialog(this, "删除\""+this.files[i].getName()+"\"文件夹中所有子目录和子文件?")==0)
this.deleteDir(files[i]); //删除指定目录中的所有子目录及文件
this.files = this.dir.listFiles();
String filenames[] = this.dir.list();
this.jlist.setListData(filenames); //重新设置列表框中的数据项
if(e.getActionCommand()=="复制到备份文件夹"&&i!=-1) //单击编辑“编辑/复制”菜单项
if(this.files[i].isFile()) //仅复制文件,不复制目录
{
File dir_copyto = new File(this.dir.getAbsolutePath()+"\\备份",""); //创建目录
File f2 = new File(dir_copyto,this.files[i].getName()); //创建复制的文件
if(!dir_copyto.exists()) //目录不存在时
{
dir_copyto.mkdir(); //创建目录
this.copyFile(this.files[i],f2);//复制文件
}
else //目录存在时
if(!f2.exists()) //文件不存在
this.copyFile(this.files[i],f2);
else //文件存在时
if(this.files[i].lastModified()>f2.lastModified())
this.copyFile(this.files[i],f2); //待复制文件日期较新时候复制
}
}
public void deleteDir(File d) //删除指定目录中的所有子目录及文件,递归算法
{
File fs[] = d.listFiles(); //返回指定目录中所有文件列表
for(int i=0;i<fs.length;i++)
{
if(fs[i].isDirectory())
deleteDir(fs[i]); //递归调用
fs[i].delete(); //删除文件或空目录
}
d.delete();
}
public void copyFile(File file1,File file2)
{ //复制文件,适用于任意类型文件,将file1文件内容复制到file2文件中,重写方式
try
{
FileInputStream fin = new FileInputStream(file1); //创建文件输入流对象
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(file1.lastModified());//将新文件的最后修改时间设置为原文件的最后修改时间
}
catch(IOException ioex)
{
JOptionPane.showMessageDialog(this, "复制"+file1.getName()+"文件未成功");
}
}
public static void main(String[] args) {
new FileManagerJFrame(); }}
这是代码
import javax.swing.*;
import java.awt.event.*;
import javax.swing.JFrame;import org.textfileeditorjframe.TextFileEditorJFrame;public class FileManagerJFrame extends JFrame implements ActionListener {
/**
*
*/
private static final long serialVersionUID = 434629409248706625L;
private File dir; //文件对象,表示指定目录
private File files[];//保存指定目录的所有文件
private JTextField text;//地址栏,显示目录路径
private JList jlist; //列表框,显示指定目录中的所有文件和子目录
public FileManagerJFrame()
{
super("文件管理器");
this.setBounds(300,200,600,480);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.dir = new File(".",""); //创建表示当前目录的文件对象
this.text = new JTextField(this.dir.getAbsolutePath()); //显示目录路径
this.getContentPane().add(this.text,"North");
this.text.addActionListener(this);
this.files =this.dir.listFiles(); //返回指定目录中所有文件对象
String filenames[] = this.dir.list();//返回指定目录中所有文件名字符串
this.jlist = new JList(filenames); //所有文件名字符串显示在列表框中
this.getContentPane().add(this.jlist);
JMenuBar menubar = new JMenuBar();
this.setJMenuBar(menubar); //菜单栏添加到框架窗口
String menustr[] = {"文件","编辑","查看","帮助"}; //以下创建菜单,添加到菜单栏中
JMenu menu[] = new JMenu[menustr.length];
for(int i=0;i<menu.length;i++)
{
menu[i] = new JMenu(menustr[i]); //创建菜单
menubar.add(menu[i]);
}
JMenu menu_new = new JMenu("新建");
menu[0].add(menu_new); //"新建"菜单是“文件”菜单的子菜单
String menuitemstr_new[] = {"文件夹","文本文档"}; //以下是创建菜单项,添加到“新建”菜单
JMenuItem menuitem_new[] = new JMenuItem[menuitemstr_new.length];
for(int i=0;i<menuitem_new.length;i++)
{
menuitem_new[i] = new JMenuItem(menuitemstr_new[i]); //创建菜单项
menu_new.add(menuitem_new[i]); //为菜单项加入到菜单
menuitem_new[i].addActionListener(this);//为菜单项注册单击监听事件
}
String menuitemstr_file[]={"打开","重命名","删除"}; //以下创建菜单选项,添加到“文件”菜单的子菜单
JMenuItem menuitem_file[] =new JMenuItem[menuitemstr_file.length];
for(int i=0;i<menuitem_file.length;i++)
{
menuitem_file[i]=new JMenuItem(menuitemstr_file[i]); //创建菜单项
menu[0].add(menuitemstr_file[i]); //菜单项加入到菜单
menuitem_file[i].addActionListener(this); //为菜单项注册单击事件监听器
}
//以下创建菜单项,添加到“编辑”菜单
String menuitemstr_edit[] = {"剪切","复制","粘贴","复制到备份文件夹"};
JMenuItem menuitem_edit[] = new JMenuItem[menuitemstr_edit.length];
for(int i=0;i<menuitem_edit.length;i++)
{
menuitem_edit[i] = new JMenuItem(menuitemstr_edit[i]);
menu[1].add(menuitem_edit[i]);
menuitem_edit[i].addActionListener(this);
}
JMenuItem menuitem_up = new JMenuItem("返回上级");//创建菜单项,添加到“查看”菜单
menu[2].add(menuitem_up);
menuitem_up.addActionListener(this);
this.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==this.text) //单击文本行
this.dir = new File(this.text.getText()); //进入指定文件夹
if(e.getActionCommand()=="返回上级")
this.dir = this.dir.getParentFile();
if(e.getActionCommand()=="文件夹")
new File(this.dir,"新建文件夹").mkdir();
if(e.getActionCommand()=="文本文档")
try
{
new File(this.dir,"新建文本文档.txt").createNewFile();
}
catch(IOException ioe)
{
}
int i=this.jlist.getSelectedIndex();
//返回列表框第一个选中数据项的序号,从0开始:没有选中时返回-1
if(e.getActionCommand()=="重命名" &&i!=-1) //单击“文件 重命名”菜单项
{
String filename = JOptionPane.showInputDialog(this,"文件名");
if(filename!=null && filename!="")
{
if(this.files[i].isFile() && !(filename.endsWith(".txt")||filename.endsWith(".TXT")))
filename +=".txt";
this.files[i].renameTo(new File(this.dir,filename));
}
}
if(e.getActionCommand()=="打开" &&i!=-1)
if(this.files[i].isFile())
{
String fname = (String)this.jlist.getSelectedValue();
int j=fname.lastIndexOf('.');
if(j>0)
{
String extend = fname.substring(j+1); //获得“.” 之后扩展名字字符串
if(extend.equals("txt")||extend.equals("java"))
new TextFileEditorJFrame(this.files[i]);//打开文本编辑器
else
JOptionPane.showMessageDialog(this,"运行错误,不能打开这种类型文件");
}
}
else //显示选中目录的文件列表
{
this.dir = this.files[i];
this.text.setText(this.dir.getAbsolutePath());
}
if(e.getActionCommand()=="删除"&&i!=-1) //当前是文件,不复制目录
if(this.files[i].isFile())
{
if(JOptionPane.showConfirmDialog(this, "删除\""+this.files[i].getName()+"\"文件?")==0)
this.files[i].delete(); //删除文件 }
else
if(JOptionPane.showConfirmDialog(this, "删除\""+this.files[i].getName()+"\"文件夹中所有子目录和子文件?")==0)
this.deleteDir(files[i]); //删除指定目录中的所有子目录及文件
this.files = this.dir.listFiles();
String filenames[] = this.dir.list();
this.jlist.setListData(filenames); //重新设置列表框中的数据项
if(e.getActionCommand()=="复制到备份文件夹"&&i!=-1) //单击编辑“编辑/复制”菜单项
if(this.files[i].isFile()) //仅复制文件,不复制目录
{
File dir_copyto = new File(this.dir.getAbsolutePath()+"\\备份",""); //创建目录
File f2 = new File(dir_copyto,this.files[i].getName()); //创建复制的文件
if(!dir_copyto.exists()) //目录不存在时
{
dir_copyto.mkdir(); //创建目录
this.copyFile(this.files[i],f2);//复制文件
}
else //目录存在时
if(!f2.exists()) //文件不存在
this.copyFile(this.files[i],f2);
else //文件存在时
if(this.files[i].lastModified()>f2.lastModified())
this.copyFile(this.files[i],f2); //待复制文件日期较新时候复制
}
}
public void deleteDir(File d) //删除指定目录中的所有子目录及文件,递归算法
{
File fs[] = d.listFiles(); //返回指定目录中所有文件列表
for(int i=0;i<fs.length;i++)
{
if(fs[i].isDirectory())
deleteDir(fs[i]); //递归调用
fs[i].delete(); //删除文件或空目录
}
d.delete();
}
public void copyFile(File file1,File file2)
{ //复制文件,适用于任意类型文件,将file1文件内容复制到file2文件中,重写方式
try
{
FileInputStream fin = new FileInputStream(file1); //创建文件输入流对象
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(file1.lastModified());//将新文件的最后修改时间设置为原文件的最后修改时间
}
catch(IOException ioex)
{
JOptionPane.showMessageDialog(this, "复制"+file1.getName()+"文件未成功");
}
}
public static void main(String[] args) {
new FileManagerJFrame(); }}
这是代码
package org.textfileeditorjframe;import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;import java.awt.*;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;public class TextFileEditorJFrame extends JFrame implements ActionListener {
private File file;
private JTextArea text;
private JFileChooser fchooser;
public TextFileEditorJFrame()
{
super("文本文件编辑器");
this.setBounds(400,300,400,300);
this.setDefaultCloseOperation(HIDE_ON_CLOSE);
this.text = new JTextArea();
this.getContentPane().add(new JScrollPane(this.text));
JMenuBar menubar = new JMenuBar();
this.setJMenuBar(menubar);
String menustr[] = {"文件","编辑","插入","格式","工具","帮助"};
JMenu menu[] = new JMenu[menustr.length];
for(int i=0;i<menu.length;i++)
{
menu[i] = new JMenu(menustr[i]);
menubar.add(menu[i]);
}
String menuitemstr[] = {"新建","打开","保存","另存为"};
JMenuItem menuitem[] = new JMenuItem[menuitemstr.length];
for(int i=0;i<menuitem.length;i++)
{
menuitem[i] = new JMenuItem(menuitemstr[i]);
menu[0].add(menuitem[i]);
menuitem[i].addActionListener(this);
}
menuitem[1].setIcon(new ImageIcon("open.ico"));
menuitem[2].setIcon(new ImageIcon("save.ico"));
JToolBar toolbar = new JToolBar();
this.getContentPane().add(toolbar,"North");
JButton bopen = new JButton("打开",new ImageIcon("open.ico"));
bopen.addActionListener(this);
toolbar.add(bopen);
JButton bsave = new JButton("保存",new ImageIcon("sava.ico"));
bsave.addActionListener(this);
toolbar.add(bsave);
this.setVisible(true);
this.file = null;
this.fchooser = new JFileChooser(new File(".",""));
this.fchooser.setFileFilter(new FileNameExtensionFilter("文本文件(*.txt)","txt"));
}
public TextFileEditorJFrame(File file)
{
this();
if(file!=null)
{
this.file = file;
this.text.setText(this.readFromFile());
this.setTitle(this.file.getName());
}
}
public TextFileEditorJFrame(String filename)
{
this(new File(filename));
}
public void wrirteToFile(String lines)
{
try
{
FileWriter fout = new FileWriter(this.file);
fout.write(lines+"\r\n");
fout.close();
}
catch(IOException ioex)
{
JOptionPane.showMessageDialog(this, "有IO错,写入"+file.getName()+"文件不成功");
}
}
public String readFromFile()
{
char lines[] = null;
try
{
FileReader fin = new FileReader(this.file);
lines = new char[(int)this.file.length()];
fin.read(lines);
fin.close();
}
catch(FileNotFoundException fe)
{
JOptionPane.showMessageDialog(this, "\""+this.file.getName()+"\"文件不存在");
}
catch(IOException ioex)
{
JOptionPane.showMessageDialog(this, "IO错,读取"+file.getName()+"文件不成功");
}
finally
{
return new String(lines);
}
}
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand()=="新建")
{
this.file = null;
this.setTitle("未命名");
this.text.setText("");
}
else if(e.getActionCommand()=="打开"&&fchooser.showOpenDialog(this)==JFileChooser.APPROVE_OPTION)
{
this.file = fchooser.getSelectedFile();
this.setTitle(this.file.getName());
this.text.setText(this.readFromFile());
}
else if(e.getActionCommand()=="保存"&&this.file!=null)
this.wrirteToFile(this.text.getText());
else if(e.getActionCommand()=="保存"&&this.file==null&&e.getActionCommand()=="另存为"
&&fchooser.showSaveDialog(this)==JFileChooser.APPROVE_OPTION)
{
this.file = fchooser.getSelectedFile();
if(!file.getName().endsWith(".txt"))
this.file = new File(file.getAbsolutePath()+".txt");
this.wrirteToFile(this.text.getText());
this.setTitle(this.file.getName());
}
}
public static void main(String[] args) {
new TextFileEditorJFrame("唐诗\\凉州词.txt");
}}
这一句应该改成menu[0].add(menuitem_file[i]); // 菜单项加入到菜单可以添加直接双击就进入的一段代码(个人不喜欢从菜单里打开,直接双击打开更方便):
MouseListener mouseListener = new MouseAdapter() {
public void mouseClicked(MouseEvent mouseEvent) {
JList theList = (JList) mouseEvent.getSource();
if (mouseEvent.getClickCount() == 2) {
int i = theList.locationToIndex(mouseEvent.getPoint());
if (i >= 0) {
if (files[i].isFile()) {
String fname = (String) jlist.getSelectedValue();
int j = fname.lastIndexOf('.');
if (j > 0) {
String extend = fname.substring(j + 1); // 获得“.”
// 之后扩展名字字符串
if (extend.equals("txt")
|| extend.equals("java"))
new TextFileEditorJFrame(files[i]);// 打开文本编辑器
else
JOptionPane.showMessageDialog(null,
"运行错误,不能打开这种类型文件");
}
} else // 显示选中目录的文件列表
{
dir = files[i];
text.setText(dir.getAbsolutePath());
}
}
files = dir.listFiles();
String filenames[] = dir.list();
jlist.setListData(filenames);
}
}
};
jlist.addMouseListener(mouseListener);