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();
}