package cn.edu.hactcm;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
//拷貝檔案示範
public class copyfiledemo extends jframe{
jfilechooser filechooser; //檔案選擇器
jtextfield jtfsourcefile; //源檔案路徑
jtextfield jtftargetfile; //目标檔案路徑
jbutton selectfile1; //選擇檔案按鈕
jbutton selectfile2;
jbutton copybutton; //拷貝按鈕
public copyfiledemo(){
super("拷貝檔案示範"); //調用父類構造函數
filechooser=new jfilechooser(); //執行個體化檔案選擇器
container container=getcontentpane(); //得到容器
jtfsourcefile=new jtextfield(16); //執行個體化元件
jtftargetfile=new jtextfield(16);
selectfile1=new jbutton("選擇");
selectfile2=new jbutton("選擇");
copybutton=new jbutton("拷貝");
box box=box.createverticalbox(); //執行個體化box,用于容納元件
jpanel panel=new jpanel();
panel.add(new jlabel("源 文 件")); //增加元件到面闆(panel)上
panel.add(jtfsourcefile);
panel.add(selectfile1);
box.add(panel); //增加元件到box上
panel=new jpanel();
panel.add(new jlabel("目标檔案"));
panel.add(jtftargetfile);
panel.add(selectfile2);
box.add(panel);
box.add(copybutton);
container.add(box); //增加元件到容器上
selectfile1.addactionlistener(new selectfilelistener()); //設定選擇檔案的事件處理
selectfile2.addactionlistener(new selectfilelistener());
copybutton.addactionlistener(new actionlistener(){ //拷貝按鈕事件處理
public void actionperformed(actionevent event) {
string sourcefile=jtfsourcefile.gettext(); //得到源檔案路徑
string targetfile=jtftargetfile.gettext(); //得到目标檔案路徑
if (copy(sourcefile,targetfile)){ //拷貝檔案
joptionpane.showmessagedialog(copyfiledemo.this,"拷貝成功"); //顯示拷貝成功資訊
}
else{
joptionpane.showmessagedialog(copyfiledemo.this,"拷貝失敗"); //發生錯誤
}
});
setsize(340,160); //設定視窗尺寸
setvisible(true); //設定視窗可視
setdefaultcloseoperation(jframe.exit_on_close); //關閉視窗時退出程式
}
class selectfilelistener implements actionlistener { //取得目錄内容的事件處理
public void actionperformed(actionevent event) {
if (filechooser.showopendialog(copyfiledemo.this)==jfilechooser.approve_option){ //彈出檔案選擇器,并判斷是否點選了打開按鈕
string filename=filechooser.getselectedfile().getabsolutepath(); //得到選擇檔案的絕對路徑
if (event.getsource().equals(selectfile1)){ //判斷事件來自于哪個按鈕
jtfsourcefile.settext(filename); //設定源檔案路徑
jtftargetfile.settext(filename); //設定目标檔案路徑
}
}
public boolean copy(string file1,string file2){ //拷貝檔案方法
try{
java.io.file filein=new java.io.file(file1); //用路徑名生成源檔案
java.io.file fileout=new java.io.file(file2); //用路徑名生成目标檔案
fileinputstream fin=new fileinputstream(filein); //得到檔案輸入流
fileoutputstream fout=new fileoutputstream(fileout); //得到檔案輸出流
byte[] bytes=new byte[1024]; //初始化位元組數組,用于緩沖
int c;
while((c=fin.read(bytes))!=-1){ //如果檔案未讀完
fout.write(bytes,0,c); //将讀取的位元組數組寫入目标檔案輸出流中
fin.close(); //關閉輸入流
fout.close(); //關閉輸出流
return true;
catch(exception e){
return false;
public static void main(string[] args){
new copyfiledemo();
}