写这个程序的前提:由于我的电脑是新买的,想把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());
}
}
}
}