天天看点

Java GUI中实现文件拷贝

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

}