天天看點

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

}