配合DiskGenius恢复的无需MP3文件的重复MP3音乐筛选JAVA-SWT

package guidancer.cem;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Objects;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.DirectoryDialog;
import org.eclipse.swt.widgets.Text;

import com.mpatric.mp3agic.*;

import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;

public class CheckSWT {

	protected Shell shlmp;
	private Text Or;
	private Text Neo;
    private String orString;
    private String neoString;
	/**
	 * Launch the application.
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			CheckSWT window = new CheckSWT();
			window.open();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * Open the window.
	 */
	public void open() {
		Display display = Display.getDefault();
		createContents();
		shlmp.open();
		shlmp.layout();
		while (!shlmp.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
	}

	/**
	 * Create contents of the window.
	 */
	protected void createContents() {
		shlmp = new Shell();
		shlmp.setSize(308, 184);
		shlmp.setText("筛选重复MP3");
		
		Button SetOr = new Button(shlmp, SWT.NONE);
		SetOr.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
					DirectoryDialog directoryDialog=new DirectoryDialog(shlmp,SWT.OPEN);
					directoryDialog.setText("选择源目录");
				    directoryDialog.setMessage("选择正确的目录");
				    orString=directoryDialog.open();
				    if(!Objects.equals(orString, null)) {
				    	Or.setText(orString);
				    	return;
				    }else {
				    	MessageBox messageBox=new MessageBox(shlmp);
				    	messageBox.setText("警告");
				    	messageBox.setMessage("选择目录有误");
				    	messageBox.open();
				    }
			}
		});
		SetOr.setBounds(186, 12, 98, 32);
		SetOr.setText("源目录");
		
		Or = new Text(shlmp, SWT.BORDER);
		Or.setBounds(10, 12, 175, 32);
		
		Neo = new Text(shlmp, SWT.BORDER);
		Neo.setBounds(10, 44, 175, 32);
		
		Button SetNeo = new Button(shlmp, SWT.NONE);
		SetNeo.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				DirectoryDialog directoryDialog=new DirectoryDialog(shlmp,SWT.OPEN);
				directoryDialog.setText("选择新目录");
			    directoryDialog.setMessage("选择正确的目录");
			    neoString=directoryDialog.open();
			    if(!Objects.equals(neoString, null)) {
			    	Neo.setText(neoString);
			    	return;
			    }else {
			    	MessageBox messageBox=new MessageBox(shlmp);
			    	messageBox.setText("警告");
			    	messageBox.setMessage("选择目录有误");
			    	messageBox.open();
			    }
			}
		});
		SetNeo.setText("新目录");
		SetNeo.setBounds(186, 44, 98, 32);
		
		Button btnOr = new Button(shlmp, SWT.NONE);
		btnOr.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				 File parentFile = new File(orString);
			        // 获取原来所有文件
			        File[] files = parentFile.listFiles();
			        ArrayList<String> keyArrayList=new ArrayList<String>();
			        for (File file : files) {
			            // 创建 Mp3File 对象
			        	String format=file.getName().toLowerCase().substring(file.getName().toLowerCase().lastIndexOf(".") + 1);
			        	if(Objects.equals(format, "mp3")) {
			            Mp3File mp3file = null;
						try {
							mp3file = new Mp3File(file);
						} catch (UnsupportedTagException | InvalidDataException | IOException e1) {
							// TODO Auto-generated catch block
							e1.printStackTrace();
						}
			            // 获取ID3v2对象,通过该对象可以获取文件信息如标题、艺术家等内容
			            ID3v2 id3v2Tag = mp3file.getId3v2Tag();
			            String keyString=id3v2Tag.getTitle()+id3v2Tag.getAlbum()+id3v2Tag.getArtist()+id3v2Tag.getAlbumArtist()+id3v2Tag.getLength()+id3v2Tag.getComposer()+id3v2Tag.getYear();
			            // 将修改后的文件保存到新的目录
			            if((keyArrayList.contains(keyString))==false) {
			            	keyArrayList.add(keyString);
			            }else {
			            	file.delete();
			            }
			            }
			        }
			}
		});
		btnOr.setBounds(10, 74, 274, 30);
		btnOr.setText("仅在源目录进行筛选");
		
		Button btnNeo = new Button(shlmp, SWT.NONE);
		btnNeo.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				 File parentFile = new File(orString);
			        File targetFile = new File(neoString);
			        // 创建新文件父目录
			        targetFile.mkdirs();
			        // 获取原来所有文件
			        File[] files = parentFile.listFiles();
			        ArrayList<String> keyArrayList=new ArrayList<String>();
			        for (File file : files) {
			            // 创建 Mp3File 对象
			        	String format=file.getName().toLowerCase().substring(file.getName().toLowerCase().lastIndexOf(".") + 1);
			        	if(Objects.equals(format, "mp3")) {
			            Mp3File mp3file = null;
						try {
							mp3file = new Mp3File(file);
						} catch (UnsupportedTagException | InvalidDataException | IOException e1) {
							// TODO Auto-generated catch block
							e1.printStackTrace();
						}
			            // 获取文件名
			            String fileName = file.getName();
			            // 获取ID3v2对象,通过该对象可以获取文件信息如标题、艺术家等内容
			            ID3v2 id3v2Tag = mp3file.getId3v2Tag();
			            String keyString=id3v2Tag.getTitle()+id3v2Tag.getAlbum()+id3v2Tag.getArtist()+id3v2Tag.getAlbumArtist()+id3v2Tag.getLength()+id3v2Tag.getComposer()+id3v2Tag.getYear();
			            // 将修改后的文件保存到新的目录
			            if((keyArrayList.contains(keyString))==false) {
			            	keyArrayList.add(keyString);
			                try {
								mp3file.save(neoString + "\\"+fileName);
							} catch (NotSupportedException | IOException e1) {
								// TODO Auto-generated catch block
								e1.printStackTrace();
							}	
			            }
			            }
			        }
			}
		});
		btnNeo.setText("源目录向新目录筛选");
		btnNeo.setBounds(10, 106, 274, 30);
	}
}
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.mpatric</groupId>
        <artifactId>mp3agic</artifactId>
        <version>0.9.1</version>
    </dependency>
  </dependencies>

DiskGenius的恢复文件功能出来的音频在多次导出后可能会有大量重复,结合SWT和大佬编写好的mp3agic接口实现了一个小程序用于筛选恢复出来的重复mp3音乐

posted @ 2021-03-11 13:49  无口赤红  阅读(46)  评论(0编辑  收藏  举报