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(); }}
这是代码

解决方案 »

  1.   

    TextFileEditorJFrame 类代码
    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");
    }}
      

  2.   

    menu[0].add(menuitemstr_file[i]); //菜单项加入到菜单
    这一句应该改成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);