?? filemanagerjframe.java
字號:
//【例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) //單擊事件處理程序
{
{
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 + -