最近做视频,各个目录里都有图片,无法统一导入到视频编辑软件 写了个小程序,可以将指定各级目录下的文件拷贝到指定目录,并以文件夹名字加数字命名 如果文件夹上都有日期,可以选择将日期放前面,做视频时好排序.
![]()
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.swing.*;
public class Tiqu {
public JFrame frame;
public JTextField fieldSource;
public JTextField fieldDesc;
public JCheckBox check;
public Boolean ifStop=true;
public void listfile(File file,Map<String,String> map){
//如果file代表的不是一个文件,而是一个目录
if(!file.isFile()){
//列出该目录下的所有文件和目录
File files[] = file.listFiles();
//遍历files[]数组
for(File f : files){
//递归
listfile(f,map);
}
}else{
String realName = file.getName();
map.put(file.toString(), realName);
}
}
public void display(Map<String,String> map){
Iterator<String> it2=map.keySet().iterator();
while(it2.hasNext()){
System.out.println(it2.next());
}
}
public void copyTodesc(Map<String,String> map,String destDir,Boolean flag) throws IOException{
Iterator<String> it2=map.keySet().iterator();
int i=1;
while(it2.hasNext()){
Object key = it2.next();
File f=new File(key.toString());
String value = f.getParent().substring(f.getParent().lastIndexOf("\\")+1);//获取上一级文件夹名字
String valueExtr = f.getAbsolutePath().substring(f.getAbsolutePath().lastIndexOf("."),f.getAbsolutePath().length());
System.out.println(value);
if(flag)
{ value=value.replaceFirst("\\.", "年");
value=value.replaceFirst("\\.", "月");
value=changePlace(value);}
if(!f.isDirectory()){
String s=destDir+"\\"+value+i+valueExtr;
i++;
this.copyFile(key.toString(),s);
System.out.println(s);
}
}
}
public static String changePlace(String value){
int head=value.length();
int tail=0;
for(int j=0;j<value.length();j++){
if(Integer.valueOf(value.charAt(j))>=Integer.valueOf('0')&&Integer.valueOf(value.charAt(j))<=Integer.valueOf('9')){
if(head>j)
head=j;
tail=j;
}
}
if(tail>head){
value=value.substring(head,tail+1)+value.substring(0,head)+value.substring(tail+1,value.length());
}
return value;
}
public void copyFile(String src,String dest) throws IOException{
FileInputStream in=new FileInputStream(src);
File file=new File(dest);
if(!file.exists())
file.createNewFile();
FileOutputStream out=new FileOutputStream(file);
int c;
byte buffer[]=new byte[1024];
while((c=in.read(buffer))!=-1&&ifStop){
for(int i=0;i<c;i++)
out.write(buffer[i]);
}
in.close();
out.close();
}
public void setup(){
//String strSource,strDest;
frame=new JFrame("提出目录里所有文件,并重命名 ");
//frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent windowEvent){
System.exit(0);
}
});
JPanel panels=new JPanel();
JPanel paneld=new JPanel();
JPanel panela=new JPanel();
JButton buttonSource=new JButton("选取源目录");
fieldSource=new JTextField(20);
JButton buttonDesc=new JButton("选取目标目录");
fieldDesc=new JTextField(20);
JButton buttonAction=new JButton("执行");
JButton stopAction=new JButton("停止");
check=new JCheckBox("是否将日期移到前面");
buttonSource.addActionListener(new SourceListener());
buttonDesc.addActionListener(new DescListener());
buttonAction.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
Map<String,String> fileNameMap = new HashMap<String,String>();
String sourceFilePath = fieldSource.getText().trim();
String descFilePath=fieldDesc.getText().trim();
if(sourceFilePath.length()>0&&descFilePath.length()>0){
listfile(new File(sourceFilePath),fileNameMap);//File既可以代表一个文件也可以代表一个目录
try {
copyTodesc(fileNameMap,descFilePath,check.isSelected());
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
});
stopAction.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
ifStop=false;
System.exit(0);
}
});
panels.add(buttonSource);
panels.add(fieldSource);
paneld.add(buttonDesc);
paneld.add(fieldDesc);
panela.add(buttonAction);
panela.add(check);
panela.add(stopAction);
panela.setBackground(Color.darkGray);
frame.getContentPane().add(BorderLayout.NORTH,panels);
frame.getContentPane().add(BorderLayout.CENTER,paneld);
frame.getContentPane().add(BorderLayout.SOUTH,panela);
frame.setSize(400,140);
frame.setVisible(true);
}
class SourceListener implements ActionListener{
public void actionPerformed(ActionEvent event){
JFileChooser jfc=new JFileChooser();
jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY );
jfc.showDialog(new JLabel(), "选择待处理目录");
File file=jfc.getSelectedFile();
System.out.println("文件:"+file.getAbsolutePath());
System.out.println(jfc.getSelectedFile().getName());
fieldSource.setText(file.getAbsolutePath());
}
}
class DescListener implements ActionListener{
public void actionPerformed(ActionEvent event){
JFileChooser jfc=new JFileChooser();
jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY );
jfc.showDialog(new JLabel(), "选择目标目录");
File file=jfc.getSelectedFile();
System.out.println("文件:"+file.getAbsolutePath());
System.out.println(jfc.getSelectedFile().getName());
fieldDesc.setText(file.getAbsolutePath());
}
}
public static void main(String[] args) throws IOException {
Tiqu t=new Tiqu();
t.setup();
//t.display(fileNameMap);
}
}