图形化界面复制

写这个程序的前提:由于我的电脑是新买的,想把Mp3里面的歌曲全部复制到电脑上,但发现个问题,由于我的
  Mp3是索尼的,由于它的特殊性,从MP3里复制出来后,是每个文件夹里面就一首歌曲或多首歌曲,手动去复制到一个文件夹里很麻烦,
  所以根据基础测试题写了这个方便复制的小程序。
 

package GUI;
/*
 * 写这个程序的前提:由于为的电脑是新买的,想把Mp3里面的歌曲全部复制到电脑上,但发现个问题,由于我的
 * Mp3是索尼的,由于它的特殊性,从MP3里复制出来后,每个文件夹里面就一首歌曲或多首歌曲,手动去复制到一个文件夹里很麻烦,
 * 所以根据基础测试题写了这个方便复制的小程序
 * */
import java.awt.Button;
import java.awt.Dialog;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class TuXingCope {
	private Frame f;
	private Button b;
	private TextArea td;
	private TextField t1,t2;
	private Dialog d;
	private Label lab;
	private Button okBut;
	TuXingCope(){
		window();
	}
	public void window(){
		f =new Frame();
		f.setBounds(300,100,600,500);
		f.setLayout(new FlowLayout());//设置窗体布局
		b=new Button("复制到:");
		td=new TextArea(25,70);
		t1=new TextField(30);
		t2=new TextField(30);
		f.add(t1);
		f.add(b);	
		f.add(t2);
		f.add(td);	
		
		
		d = new Dialog(f,"提示信息-self",true);//依赖于f的对话框,true即非要点掉对话框
		d.setBounds(400,200,240,150);//设置对话框长宽高
		d.setLayout(new FlowLayout());//设置对话框布局
		lab = new Label();//创建标签。
		okBut = new Button("确定");//创建确定
		d.add(lab);//将标签添加到对话框中,后期用Set方法设置标签文字
		d.add(okBut);//将按钮添加到对话框中
		
		myEvent();
		f.setVisible(true);
	}
	private void myEvent(){//单独写一个监听器事件。
		f.addWindowListener(new WindowAdapter()//监听器
		{
			public void windowClosing(WindowEvent e)//监听事件
			{
				System.exit(0);
			}
		});
		b.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e)//监听事件
			{
				Copy();
			}		
		});
		okBut.addActionListener(new ActionListener()//监听源为“确定”按钮,对话框里的按钮监听事件
		{
			public void actionPerformed(ActionEvent e)
			{
				d.setVisible(false);//根据参数 b 的值显示或隐藏此 Dialog。
			}
		});
		d.addWindowListener(new WindowAdapter()//监听源为对话框,对话框监听事件
		{
			public void windowClosing(WindowEvent e)
			{
				d.setVisible(false);
			}
		});
		t1.addKeyListener(new KeyAdapter()//监听源为单行文本框,键盘回车实现"复制到"
		{
			public void keyPressed(KeyEvent e)
			{
				if(e.getKeyCode()==KeyEvent.VK_ENTER)
					Copy();
			}
		});
	}
	private void Copy(){//复制方法
		String dirPath = t1.getText();
		String dirPath1= t2.getText();
		String dirPath2=dirPath1+"\\";
		FileInputStream fis =null;
		FileOutputStream fos =null;
		//关联输入的路径
		File dir =new File(dirPath);
		//关联输出的路径,没有就创建
		File filewjj=new File(dirPath1);
		if(!filewjj.exists()) filewjj.mkdir();
		//判断文件夹是否存在,监控。
		if(dir.exists() && dir.isDirectory())
		{	
			 td.setText("");
			 NmaeCun s=new NmaeCun();
			 s.showDir(dir);//非静态对象调用
			 //得到添加问元素的List集合;
			 int count=0;
			 List<String> list =s.getInstance();	 
			 Iterator<String> it= list.iterator(); 
			 while(it.hasNext()){
				 String str =it.next();	
				// System.out.println(str); 
				 File fileww =new File(dirPath2+getPath(str));
				 if(fileww.exists())//判断文件是否存在,防止覆盖重名文件,有缺陷
					{
					 fileww = new File(dirPath2+getPath1(str));
					}
				 	try{
						 fis = new FileInputStream(str);				 
						 fos = new FileOutputStream(fileww);
						 int len = 0;
			             byte[] buf = new byte[1024];
			             while((len = fis.read(buf)) != -1){
			            	  fos.write(buf,0,len);		 
						 }	
					}catch(IOException e){
						td.append("复制失败");	
					}
					finally
					{
						 try {
								fis.close();
							} catch (IOException e) {						
								e.printStackTrace();
							}		 
							 try {
								fos.close();
							} catch (IOException e) {
								e.printStackTrace();
							}			 
					}				
					td.append("文件"+str+"被成功复制!"+"\r\n");
					 count++;
			 }
			 td.append("所有文件复制完成,共复制了"+count+"个文件!"+"\r\n");				 
		  }
		  else
		  {
			String info = "您输入的路径:"+dirPath+"是错误的。请重输";
			lab.setText(info);//设置标签文字
			d.setVisible(true);
		  }
	}
	
	 private  String getPath(String str){
		 String n =str.substring(str.lastIndexOf("\\")+1, str.length());
		 return n;
	 }
	 int a =1;
	 //重名文件调养方法。有缺陷,实在解决不了
	 private  String getPath1(String str){
		 a++;
		 String n =
				 str.substring(str.lastIndexOf("\\")+1, str.length()).replace(str.substring(str.lastIndexOf("."), str.length()), "("+a+")"+str.substring(str.lastIndexOf("."), str.length()));	 	 
		 return n;
	 }
	 
	 public static void main(String[] args)  {
		new TuXingCope();			
	 }	
	 
}	
class NmaeCun{
	//定义在外面,防止递归会创建多个对象
	 List<String> l =new ArrayList<String>();
	 public List<String> getInstance()
	 {
		return l;
	 }
	 int count =0;
	 public void showDir(File dir){
		if(count==0){
			l.clear();
		}
		count++;//防止递归的时候再次清理集合里的元素
		File[] files =dir.listFiles();	
		for(int x =0;x<files.length;x++){
			if(files[x].isDirectory()){
				showDir(files[x]);
			}else{
				l.add(files[x].toString());
			}
		}
	}
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值