- 浏览: 182850 次
- 性别:
- 来自: 北京
最新评论
-
u011374223:
获取颜色的方法有两个,07xssfWORKBOOK的需要用这个 ...
apache poi读取excel中的颜色,真是坑爹啊 -
zhangtcb:
读取的颜色和Excel中的不一样啊
apache poi读取excel中的颜色,真是坑爹啊 -
LD_21:
...
log4j日志文件的相对路径 -
xfxlch:
upThx
来,让我们一起画个印章吧 -
xinxinlong:
单元格的style里面有个颜色,如果双击单元格,里面的文字选中 ...
apache poi读取excel中的颜色,真是坑爹啊
硬盘内的mp3文件太多了,下的时候没有归类,结果比较乱,就自己写了个小程序分拣.上代码:
程序运行图
会将文件按照这两种格式放置在选定的目录中
主程序
package com.javaeye.i2534; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Rectangle; import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; import javax.swing.BorderFactory; import javax.swing.DefaultListModel; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.SwingConstants; import javax.swing.border.TitledBorder; import javax.swing.filechooser.FileFilter; import javax.swing.filechooser.FileSystemView; /** * * @author lan * */ public class MP3Manager extends JFrame { private static final long serialVersionUID = 1L; private JPanel jContentPane = null; private JPanel jPanel = null; private JLabel pathLabel = null; private JTextField pathTextField = null; private JButton browseButton = null; private JScrollPane jScrollPane = null; private JPanel jPanel1 = null; private JList fileList = null; private JLabel nameLabel = null; private JLabel artistLabel = null; private JLabel albumLabel = null; private JLabel yearLabel = null; private JLabel commentLabel = null; private JTextField nameTextField = null; private JTextField artistTextField = null; private JTextField albumTextField = null; private JTextField yearTextField = null; private JTextArea commentTextArea = null; private JMenuBar mainMenuBar = null; private JMenu fileMenu = null; private JMenuItem exitMenuItem = null; private JMenuItem groupMenuItem = null; /** * This is the default constructor */ public MP3Manager() { super(); initialize(); } /** * This method initializes this * * @return void */ private void initialize() { this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setJMenuBar(getMainMenuBar()); this.setSize(560, 415); this.add(getJContentPane(), BorderLayout.CENTER); this.setTitle("MP3管理工具"); } /** * This method initializes jContentPane * * @return javax.swing.JPanel */ private JPanel getJContentPane() { if (jContentPane == null) { jContentPane = new JPanel(); jContentPane.setLayout(new BorderLayout()); jContentPane.add(getJPanel(), BorderLayout.CENTER); } return jContentPane; } /** * This method initializes jPanel * * @return javax.swing.JPanel */ private JPanel getJPanel() { if (jPanel == null) { pathLabel = new JLabel(); pathLabel.setBounds(new Rectangle(36, 21, 54, 24)); pathLabel.setHorizontalAlignment(SwingConstants.RIGHT); pathLabel.setText("文件夹"); jPanel = new JPanel(); jPanel.setLayout(null); jPanel.add(pathLabel, null); jPanel.add(getPathTextField(), null); jPanel.add(getBrowseButton(), null); jPanel.add(getJScrollPane(), null); jPanel.add(getJPanel1(), null); } return jPanel; } /** * This method initializes pathTextField * * @return javax.swing.JTextField */ private JTextField getPathTextField() { if (pathTextField == null) { pathTextField = new JTextField(); pathTextField.setBounds(new Rectangle(112, 20, 311, 26)); } return pathTextField; } /** * This method initializes browseButton * * @return javax.swing.JButton */ private JButton getBrowseButton() { if (browseButton == null) { browseButton = new JButton(); browseButton.setBounds(new Rectangle(438, 21, 62, 22)); browseButton.setText("浏览"); browseButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { JFileChooser chooser = new JFileChooser(FileSystemView .getFileSystemView()); chooser .setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); chooser.addChoosableFileFilter(new FileFilter() { @Override public boolean accept(File f) { if (f.isDirectory()) { return true; } else if (f.isFile()) { return f.getName().toLowerCase() .endsWith(".mp3"); } return false; } @Override public String getDescription() { return "MP3 (.mp3)"; } }); if (chooser.showOpenDialog(MP3Manager.this) == JFileChooser.APPROVE_OPTION) { File dir = chooser.getSelectedFile(); getPathTextField().setText(dir.getAbsolutePath()); Set<File> set = new HashSet<File>(); MP3Util.walk(dir, set); DefaultListModel model = (DefaultListModel) getFileList() .getModel(); model.clear(); List<FileWrapper> warppers = new ArrayList<FileWrapper>(); for (File f : set) { warppers.add(new FileWrapper(f)); } Collections.sort(warppers); for (FileWrapper f : warppers) { model.addElement(f); } } } }); } return browseButton; } /** * file包装器,方便list显示 * * @author lan * */ private class FileWrapper implements Comparable<FileWrapper> { File file; public FileWrapper(File file) { this.file = file; } @Override public String toString() { return file.getName(); } public int compareTo(FileWrapper o) { if (o == null) { return -1; } return this.file.getName().compareTo(o.file.getName()); } } /** * This method initializes jScrollPane * * @return javax.swing.JScrollPane */ private JScrollPane getJScrollPane() { if (jScrollPane == null) { jScrollPane = new JScrollPane(); jScrollPane.setBounds(new Rectangle(23, 75, 197, 265)); jScrollPane.setViewportView(getFileList()); jScrollPane .setBorder(BorderFactory .createTitledBorder(null, "MP3\u5217\u8868", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, new Font( "Dialog", Font.BOLD, 12), new Color(51, 51, 51))); } return jScrollPane; } /** * This method initializes jPanel1 * * @return javax.swing.JPanel */ private JPanel getJPanel1() { if (jPanel1 == null) { commentLabel = new JLabel(); commentLabel.setBounds(new Rectangle(25, 190, 50, 20)); commentLabel.setText("信息"); yearLabel = new JLabel(); yearLabel.setBounds(new Rectangle(25, 150, 50, 20)); yearLabel.setText("年代"); albumLabel = new JLabel(); albumLabel.setBounds(new Rectangle(25, 110, 50, 20)); albumLabel.setText("专辑"); artistLabel = new JLabel(); artistLabel.setBounds(new Rectangle(25, 70, 50, 20)); artistLabel.setText("演唱"); nameLabel = new JLabel(); nameLabel.setBounds(new Rectangle(25, 30, 50, 20)); nameLabel.setText("名称"); jPanel1 = new JPanel(); jPanel1.setLayout(null); jPanel1.setBounds(new Rectangle(257, 75, 256, 264)); jPanel1 .setBorder(BorderFactory .createTitledBorder(null, "MP3\u4fe1\u606f", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, new Font( "Dialog", Font.BOLD, 12), new Color(51, 51, 51))); jPanel1.add(nameLabel, null); jPanel1.add(artistLabel, null); jPanel1.add(albumLabel, null); jPanel1.add(yearLabel, null); jPanel1.add(commentLabel, null); jPanel1.add(getNameTextField(), null); jPanel1.add(getArtistTextField(), null); jPanel1.add(getAlbumTextField(), null); jPanel1.add(getYearTextField(), null); jPanel1.add(getCommentTextArea(), null); } return jPanel1; } /** * This method initializes fileList * * @return javax.swing.JList */ private JList getFileList() { if (fileList == null) { fileList = new JList(new DefaultListModel()); fileList .addListSelectionListener(new javax.swing.event.ListSelectionListener() { public void valueChanged( javax.swing.event.ListSelectionEvent e) { if (e.getValueIsAdjusting()) { Object o = fileList.getSelectedValue(); if (o instanceof FileWrapper) { File f = ((FileWrapper) o).file; MP3Info info = MP3Util.getInfo(f); getNameTextField().setText(info.getName()); getArtistTextField().setText(info .getArtist()); getAlbumTextField() .setText(info.getAlbum()); getYearTextField().setText(info.getYear()); getCommentTextArea().setText(info .getComment()); } } } }); } return fileList; } /** * This method initializes nameTextField * * @return javax.swing.JTextField */ private JTextField getNameTextField() { if (nameTextField == null) { nameTextField = new JTextField(); nameTextField.setBounds(new Rectangle(95, 30, 130, 20)); nameTextField.setEditable(false); } return nameTextField; } /** * This method initializes artistTextField * * @return javax.swing.JTextField */ private JTextField getArtistTextField() { if (artistTextField == null) { artistTextField = new JTextField(); artistTextField.setBounds(new Rectangle(95, 70, 130, 20)); artistTextField.setEditable(false); } return artistTextField; } /** * This method initializes albumTextField * * @return javax.swing.JTextField */ private JTextField getAlbumTextField() { if (albumTextField == null) { albumTextField = new JTextField(); albumTextField.setBounds(new Rectangle(95, 110, 130, 20)); albumTextField.setEditable(false); } return albumTextField; } /** * This method initializes yearTextField * * @return javax.swing.JTextField */ private JTextField getYearTextField() { if (yearTextField == null) { yearTextField = new JTextField(); yearTextField.setBounds(new Rectangle(95, 150, 130, 20)); yearTextField.setEditable(false); } return yearTextField; } /** * This method initializes commentTextArea * * @return javax.swing.JTextArea */ private JTextArea getCommentTextArea() { if (commentTextArea == null) { commentTextArea = new JTextArea(); commentTextArea.setBounds(new Rectangle(95, 190, 130, 60)); commentTextArea.setEditable(false); commentTextArea.setEnabled(true); commentTextArea.setLineWrap(true); } return commentTextArea; } /** * This method initializes mainMenuBar * * @return javax.swing.JMenuBar */ private JMenuBar getMainMenuBar() { if (mainMenuBar == null) { mainMenuBar = new JMenuBar(); mainMenuBar.add(getFileMenu()); } return mainMenuBar; } /** * This method initializes fileMenu * * @return javax.swing.JMenu */ private JMenu getFileMenu() { if (fileMenu == null) { fileMenu = new JMenu(); fileMenu.setPreferredSize(new Dimension(50, 20)); fileMenu.setText("文件"); fileMenu.setBounds(new Rectangle(0, 0, 50, 20)); fileMenu.add(getGroupMenuItem()); fileMenu.add(getExitMenuItem()); } return fileMenu; } /** * This method initializes exitMenuItem * * @return javax.swing.JMenuItem */ private JMenuItem getExitMenuItem() { if (exitMenuItem == null) { exitMenuItem = new JMenuItem(); exitMenuItem.setText("退出"); exitMenuItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { System.exit(0); } }); } return exitMenuItem; } /** * This method initializes groupMenuItem * * @return javax.swing.JMenuItem */ private JMenuItem getGroupMenuItem() { if (groupMenuItem == null) { groupMenuItem = new JMenuItem(); groupMenuItem.setText("分组"); groupMenuItem .addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { String text = getPathTextField().getText(); File dir = new File(text); if (dir.exists() && dir.isDirectory()) { MP3GroupDialog sd = new MP3GroupDialog( MP3Manager.this); sd.setPath(dir); sd.setVisible(true); } } }); } return groupMenuItem; } public static void main(String[] args) { MP3Manager m = new MP3Manager(); m.setLocationRelativeTo(null); m.setVisible(true); } } // @jve:decl-index=0:visual-constraint="10,10"
MP3的info类
package com.javaeye.i2534; import java.nio.charset.Charset; import java.util.Arrays; /** * mp3信息,遵循ID3v1格式 * * @author lan * */ public class MP3Info { private final Charset GBK = Charset.forName("GBK"); // 应该是128位 private byte[] tag; public MP3Info(byte[] tag) throws IllegalArgumentException { this.tag = tag; if (this.tag.length != 128) { throw new IllegalArgumentException(); } if (!isValid()) { throw new IllegalArgumentException(); } } /** * 是否包含TAG标签,如果没有,就是不合法的信息,不能读取 * * @return */ private boolean isValid() { byte[] array = Arrays.copyOfRange(this.tag, 0, 3); String s = new String(array, GBK); return "TAG".equals(s); } /** * 艺术家 * * @return */ public String getArtist() { return getString(33, 63); } /** * 专辑 * * @return */ public String getAlbum() { return getString(63, 93); } /** * 音乐名称 * * @return */ public String getName() { return getString(3, 33); } /** * 年代 * * @return */ public String getYear() { return getString(93, 97); } /** * 备注信息 * * @return */ public String getComment() { return getString(97, 125); } /** * 流派 */ public String getCenre() { return getString(127, 128); } /** * 获取tag中指定范围内的字符串 * * @param from * @param to * @return */ private String getString(int from, int to) { byte[] array = Arrays.copyOfRange(this.tag, from, to); int length = 0; for (byte b : array) { if (b != 0) { length++; } else { break; } } return new String(array, 0, length, GBK); } /* * ID3 GENRES LIST * * 0 - Blues * * 1 - Classic Rock * * 2 - Country * * 3 - Dance * * 4 - Disco * * 5 - Funk * * 6 - Grunge * * 7 - Hip-Hop * * 8 - Jazz * * 9 - Metal * * 10 - New Age * * 11 - Oldies * * 12 - Other * * 13 - Pop * * 14 - R&B * * 15 - Rap * * 16 - Reggae * * 17 - Rock * * 18 - Techno * * 19 - Industrial * * 20 - Alternative * * 21 - Ska * * 22 - Death Metal * * 23 - Pranks * * 24 - Soundtrack * * 25 - Euro-Techno * * 26 - Ambient * * 27 - Trip-Hop * * 28 - Vocal * * 29 - Jazz+Funk * * 30 - Fusion * * 31 - Trance * * 32 - Classical * * 33 - Instrumental * * 34 - Acid * * 35 - House * * 36 - Game * * 37 - Sound Clip * * 38 - Gospel * * 39 - Noise * * 40 - Alternative Rock * * 41 - Bass * * 42 - Soul * * 43 - Punk * * 44 - Space * * 45 - Meditative * * 46 - Instrumental Pop * * 47 - Instrumental Rock * * 48 - Ethnic * * 49 - Gothic * * 50 - Darkwave * * 51 - Techno-Industrial * * 52 - Electronic * * 53 - Pop-Folk * * 54 - Eurodance * * 55 - Dream * * 56 - Southern Rock * * 57 - Comedy * * 58 - Cult * * 59 - Gangsta * * 60 - Top 40 * * 61 - Christian Rap * * 62 - Pop/Funk * * 63 - Jungle * * 64 - Native US * * 65 - Cabaret * * 66 - New Wave * * 67 - Psychadelic * * 68 - Rave * * 69 - Showtunes * * 70 - Trailer * * 71 - Lo-Fi * * 72 - Tribal * * 73 - Acid Punk * * 74 - Acid Jazz * * 75 - Polka * * 76 - Retro * * 77 - Musical * * 78 - Rock & Roll * * 79 - Hard Rock * * 80 - Folk * * 81 - Folk-Rock * * 82 - National Folk * * 83 - Swing * * 84 - Fast Fusion * * 85 - Bebob * * 86 - Latin * * 87 - Revival * * 88 - Celtic * * 89 - Bluegrass * * 90 - Avantgarde * * 91 - Gothic Rock * * 92 - Progressive Rock * * 93 - Psychedelic Rock * * 94 - Symphonic Rock * * 95 - Slow Rock * * 96 - Big Band * * 97 - Chorus * * 98 - Easy Listening * * 99 - Acoustic * * 100 - Humour * * 101 - Speech * * 102 - Chanson * * 103 - Opera * * 104 - Chamber Music * * 105 - Sonata * * 106 - Symphony * * 107 - Booty Bass * * 108 - Primus * * 109 - Porn Groove * * 110 - Satire * * 111 - Slow Jam * * 112 - Club * * 113 - Tango * * 114 - Samba * * 115 - Folklore * * 116 - Ballad * * 117 - Power Ballad * * 118 - Rhythmic Soul * * 119 - Freestyle * * 120 - Duet * * 121 - Punk Rock * * 122 - Drum Solo * * 123 - Acapella * * 124 - Euro-House * * 125 - Dance Hall * * 126 - Goa * * 127 - Drum & Bass * * 128 - Club - House * * 129 - Hardcore * * 130 - Terror * * 131 - Indie * * 132 - BritPop * * 133 - Negerpunk * * 134 - Polsk Punk * * 135 - Beat * * 136 - Christian Gangsta Rap * * 137 - Heavy Metal * * 138 - Black Metal * * 139 - Crossover * * 140 - Contemporary Christian * * 141 - Christian Rock * * 142 - Merengue * * 143 - Salsa * * 144 - Thrash Metal * * 145 - Anime * * 146 - JPop * * 147 - Synthpop * * 148 and further - Unknown * * 255 Unknown */ }
mp3分组的dialog类
package com.javaeye.i2534; import java.awt.BorderLayout; import java.awt.Frame; import java.awt.Rectangle; import java.io.File; import java.util.HashSet; import java.util.Set; import javax.swing.ButtonGroup; import javax.swing.ButtonModel; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JPanel; import javax.swing.JRadioButton; /** * * @author lan * */ public class MP3GroupDialog extends JDialog { private static final long serialVersionUID = 1L; private JPanel jContentPane = null; private JPanel jPanel = null; private JRadioButton jRadioButton = null; private JRadioButton jRadioButton1 = null; private JButton jButton = null; private JButton jButton1 = null; private ButtonGroup buttonGroup = null; private File path = null; //@jve:decl-index=0: /** * @param owner */ public MP3GroupDialog(Frame owner) { super(owner); initialize(); this.setLocationRelativeTo(owner); } public void setPath(File path) { this.path = path; } /** * This method initializes this * * @return void */ private void initialize() { this.setSize(262, 246); this.setTitle("选择分组"); this.setContentPane(getJContentPane()); } /** * This method initializes jContentPane * * @return javax.swing.JPanel */ private JPanel getJContentPane() { if (jContentPane == null) { jContentPane = new JPanel(); jContentPane.setLayout(new BorderLayout()); jContentPane.add(getJPanel(), BorderLayout.CENTER); } return jContentPane; } /** * This method initializes jPanel * * @return javax.swing.JPanel */ private JPanel getJPanel() { if (jPanel == null) { jPanel = new JPanel(); jPanel.setLayout(null); jPanel.add(getJRadioButton(), null); jPanel.add(getJRadioButton1(), null); jPanel.add(getJButton(), null); jPanel.add(getJButton1(), null); } return jPanel; } /** * This method initializes jRadioButton * * @return javax.swing.JRadioButton */ private JRadioButton getJRadioButton() { if (jRadioButton == null) { jRadioButton = new JRadioButton(); jRadioButton.setBounds(new Rectangle(50, 36, 141, 21)); jRadioButton.setText("歌手-专辑-歌曲"); jRadioButton.setActionCommand("aas"); getButtonGroup().add(jRadioButton); } return jRadioButton; } /** * This method initializes jRadioButton1 * * @return javax.swing.JRadioButton */ private JRadioButton getJRadioButton1() { if (jRadioButton1 == null) { jRadioButton1 = new JRadioButton(); jRadioButton1.setBounds(new Rectangle(50, 80, 133, 21)); jRadioButton1.setText("歌手-歌曲"); jRadioButton1.setSelected(true); jRadioButton1.setActionCommand("as"); getButtonGroup().add(jRadioButton1); } return jRadioButton1; } /** * This method initializes jButton * * @return javax.swing.JButton */ private JButton getJButton() { if (jButton == null) { jButton = new JButton(); jButton.setBounds(new Rectangle(38, 140, 60, 25)); jButton.setText("确定"); jButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { Set<File> mp3s = new HashSet<File>(); MP3Util.walk(path, mp3s); ButtonModel bm = getButtonGroup().getSelection(); String command = bm.getActionCommand(); if ("aas".equals(command)) { MP3GroupProgress progress = new MP3GroupProgress(null); progress.setVisible(true);// 不知道为什么,居然不显示 int i = 0, length = mp3s.size(); for (File f : mp3s) { i++; MP3Info info = MP3Util.getInfo(f); String artist = info.getArtist(); if (artist == null) { artist = "未知歌手"; } File dir = new File(path, artist); if (!dir.exists()) { dir.mkdirs(); } String album = info.getAlbum(); if (album == null) { album = "未知专辑"; } File d = new File(dir, album); if (!d.exists()) { d.mkdirs(); } String text = ""; if (!f.getParentFile().equals(d)) { if (MP3Util.move(f, d)) { text = "移动文件 " + f.getName() + " 到 " + d.getPath() + " 下"; } else { text = "无法移动文件 " + f.getName(); } } else { text = "文件 " + f.getName() + " 不需要移动"; } System.out.println(text); progress.getJProgressBar().setString(text); progress.getJProgressBar() .setValue((int) (i * 100 / length)); } } else if ("as".equals(command)) { MP3GroupProgress progress = new MP3GroupProgress(null); progress.setVisible(true); int i = 0, length = mp3s.size(); for (File f : mp3s) { i++; MP3Info info = MP3Util.getInfo(f); String artist = info.getArtist(); if (artist == null) { artist = "未知歌手"; } File d = new File(path, artist); if (!d.exists()) { d.mkdirs(); } String text = ""; if (!f.getParentFile().equals(d)) { if (MP3Util.move(f, d)) { text = "移动文件 " + f.getName() + " 到 " + d.getPath() + " 下"; } else { text = "无法移动文件 " + f.getName(); } } else { text = "文件 " + f.getName() + " 不需要移动"; } System.out.println(text); progress.getJProgressBar().setString(text); progress.getJProgressBar() .setValue((int) (i * 100 / length)); } } MP3GroupDialog.this.dispose(); } }); } return jButton; } /** * This method initializes jButton1 * * @return javax.swing.JButton */ private JButton getJButton1() { if (jButton1 == null) { jButton1 = new JButton(); jButton1.setBounds(new Rectangle(138, 140, 60, 25)); jButton1.setText("取消"); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { MP3GroupDialog.this.dispose(); } }); } return jButton1; } private ButtonGroup getButtonGroup() { if (buttonGroup == null) { buttonGroup = new ButtonGroup(); } return buttonGroup; } } // @jve:decl-index=0:visual-constraint="10,10"
然后是工具类
package com.javaeye.i2534; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.channels.FileChannel; import java.util.Collection; public final class MP3Util { private MP3Util() {}; public static MP3Info getInfo(File file) { RandomAccessFile raf = null; try { raf = new RandomAccessFile(file, "r"); byte[] array = new byte[128]; raf.seek(raf.length() - 128); raf.read(array); MP3Info info = new MP3Info(array); return info; } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } catch (IllegalArgumentException e1) { e1.printStackTrace(); } finally { if (raf != null) { try { raf.close(); } catch (IOException e1) { e1.printStackTrace(); } } } return null; } /** * 遍历文件,获取所有后缀为mp3的文件 * * @param file * @param files */ public static void walk(File file, Collection<File> files) { if (file.isHidden()) { return; } if (file.isDirectory()) { for (File f : file.listFiles()) { MP3Util.walk(f, files); } } else if (file.isFile()) { if (file.getName().toLowerCase().endsWith(".mp3")) { files.add(file); } } } public static boolean move(File f, File dir) { if (f.exists() && f.isFile()) { try { RandomAccessFile raf = new RandomAccessFile(f, "r"); FileChannel fc = raf.getChannel(); RandomAccessFile wr = new RandomAccessFile(new File(dir, f .getName()), "rw"); FileChannel wfc = wr.getChannel(); fc.transferTo(0, fc.size(), wfc); wfc.close(); raf.close(); return f.delete(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } return false; } }
最后是一个不能正常工作的进度条.....
package com.javaeye.i2534; import java.awt.BorderLayout; import java.awt.Cursor; import javax.swing.JDialog; import javax.swing.JPanel; import javax.swing.JProgressBar; import javax.swing.JWindow; public class MP3GroupProgress extends JWindow { private static final long serialVersionUID = 1L; private JPanel jContentPane = null; private JPanel jPanel = null; private JProgressBar jProgressBar = null; /** * This method initializes jPanel * * @return javax.swing.JPanel */ private JPanel getJPanel() { if (jPanel == null) { jPanel = new JPanel(); jPanel.setLayout(new BorderLayout()); jPanel.add(getJProgressBar(), BorderLayout.CENTER); } return jPanel; } /** * This method initializes jProgressBar * * @return javax.swing.JProgressBar */ public JProgressBar getJProgressBar() { if (jProgressBar == null) { jProgressBar = new JProgressBar(1, 100); jProgressBar.setStringPainted(true); } return jProgressBar; } /** * @param args */ public static void main(String[] args) { final MP3GroupProgress p = new MP3GroupProgress(null); p.setVisible(true); new Thread() { public void run() { for (int i = 0; i < 100; i++) { p.getJProgressBar().setString("Now " + i); p.getJProgressBar().setValue(i); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); } /** * @param owner */ public MP3GroupProgress(JDialog owner) { initialize(); this.setLocationRelativeTo(owner); } /** * This method initializes this * * @return void */ private void initialize() { this.setSize(474, 45); this.setContentPane(getJContentPane()); this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); } /** * This method initializes jContentPane * * @return javax.swing.JPanel */ private JPanel getJContentPane() { if (jContentPane == null) { jContentPane = new JPanel(); jContentPane.setLayout(new BorderLayout()); jContentPane.add(getJPanel(), BorderLayout.CENTER); } return jContentPane; } } // @jve:decl-index=0:visual-constraint="10,10"
- src.zip (10.2 KB)
- 下载次数: 246
评论
13 楼
i2534
2010-04-26
Angel_Night 写道
我觉得抱怨swing美观,或者觉得是玩具的..没意义..
领会精神..我非常喜欢这种所谓的"java程序员的解决方式"
就好像前些天有一哥们写了一个电驴下载完毕直接关机的程序
虽然不如用脚本简洁
但是这是一种精神
领会精神..我非常喜欢这种所谓的"java程序员的解决方式"
就好像前些天有一哥们写了一个电驴下载完毕直接关机的程序
虽然不如用脚本简洁
但是这是一种精神
哥们说到我心里去了,我就是一个java程序员,我就喜欢用java来解决遇到的问题,虽然可能已经有更好的解决办法了,但是路不都是人走出来的么,我为什么就不能再走一条路,虽然可能会头破血流...
12 楼
Angel_Night
2010-04-26
我觉得抱怨swing美观,或者觉得是玩具的..没意义..
领会精神..我非常喜欢这种所谓的"java程序员的解决方式"
就好像前些天有一哥们写了一个电驴下载完毕直接关机的程序
虽然不如用脚本简洁
但是这是一种精神
领会精神..我非常喜欢这种所谓的"java程序员的解决方式"
就好像前些天有一哥们写了一个电驴下载完毕直接关机的程序
虽然不如用脚本简洁
但是这是一种精神
11 楼
i2534
2010-04-26
whaosoft 写道
唉 就是不老美观的 不过我也只是说说 我做的swing的东西比你的也好看不了
这个是很多程序员没办法的事,需要大量美工支持,你知道的,现在美工太贵了,比程序本身都贵
10 楼
i2534
2010-04-26
gml520 写道
问题不少阿,经常报异常!估计楼主还没有对mp3 分析透彻~ ,期待楼主进一步改进~
是有很多问题,这个不是专业的工具,mp3的标签分为好几种,我只是处理了我自己硬盘的,因为我的歌都是从巨鲸和qq音乐上下的,标签都是这个,都很规范
9 楼
i2534
2010-04-26
xiaoyiz 写道
硬盘内的mp3文件太多了,下的时候没有归类,结果比较乱,就自己写了个小程序分拣.上代码:
...楼主的精神可嘉,可是能用简单的方法就用最简单的方法解决
如果你使用windows, Win+F ---》输入 *.mp3-->回车 搜索出所有MP3文件。。。岂不是更简单?更省心?
...楼主的精神可嘉,可是能用简单的方法就用最简单的方法解决
如果你使用windows, Win+F ---》输入 *.mp3-->回车 搜索出所有MP3文件。。。岂不是更简单?更省心?
这样能把各个文件放进歌手文件夹吗?
8 楼
i2534
2010-04-26
kjj 写道
吃力不讨好的工作,很多mp3根本没有id3信息,这些只能是个玩具吧!!
对,这个还真是个玩具,自己拿来分类本地歌曲的.
7 楼
kjj
2010-04-26
吃力不讨好的工作,很多mp3根本没有id3信息,这些只能是个玩具吧!!
6 楼
xiaoyiz
2010-04-25
硬盘内的mp3文件太多了,下的时候没有归类,结果比较乱,就自己写了个小程序分拣.上代码:
...楼主的精神可嘉,可是能用简单的方法就用最简单的方法解决
如果你使用windows, Win+F ---》输入 *.mp3-->回车 搜索出所有MP3文件。。。岂不是更简单?更省心?
...楼主的精神可嘉,可是能用简单的方法就用最简单的方法解决
如果你使用windows, Win+F ---》输入 *.mp3-->回车 搜索出所有MP3文件。。。岂不是更简单?更省心?
5 楼
gml520
2010-04-25
问题不少阿,经常报异常!估计楼主还没有对mp3 分析透彻~ ,期待楼主进一步改进~
4 楼
whaosoft
2010-04-25
唉 就是不老美观的 不过我也只是说说 我做的swing的东西比你的也好看不了
3 楼
wtotal
2010-04-24
估计结果会有很多未分类的歌曲。
2 楼
skyyks0001
2010-04-24
看了看 只支持id3v1 现在大多数都是id3v2了 有的mp3甚至没有id3v1标签
1 楼
greatghoul
2010-04-24
正限机子上mp3也比较乱,顺便研究下你的代码。如果把歌曲名,专辑名等都做成参数的形式,那就可以自定义名字了,不限于你当前提供了两种。可以随意组合。
发表评论
-
公约数,公倍数和素数的简单计算
2012-04-01 16:08 1331为自己留作备份,省得用到的时候再去寻找 简单的计算最大公约数 ... -
java简单打印
2012-03-08 09:56 1234没什么,就是一个简单的打印,留作存档 publi ... -
httpclient4的封装
2012-01-06 15:11 4636没什么特别的,自己封装着用的. package cpcns. ... -
h2的baseDir
2011-11-11 16:38 1464使用h2 1.3.161.在web项目中.计划在Listene ... -
eclipse下自动打包项目并部署到web项目的lib下
2011-10-18 15:59 5119修改web项目的.settings下的org.eclipse. ... -
获取汉字的五笔,全拼和双拼的工具类
2011-10-10 15:51 2393如题,项目需要,首先可用的自然是pinyin4j. 在不考虑 ... -
五笔86和汉字对照表
2011-10-09 16:53 2533项目要用到汉字转拼音和五笔,拼音容易,使用pinyin4j. ... -
java System属性
2011-09-19 10:14 1387自定义 : java -Dname=value S ... -
log4j日志文件的相对路径
2011-09-01 10:51 6813一直没能很好的解决log4j的日志文件的保存路径.今天恰好又遇 ... -
Apache codec中的base64
2011-07-20 09:46 2287一直使用sun的base64,但是感觉不是很好,毕竟不是标准包 ... -
来,让我们一起画个印章吧
2011-07-04 14:52 4530这几天发现有哥们在介� ... -
svg中的arc转化为java中的arc
2011-05-27 15:31 2682最近项目需要解析svg中的path.直线和贝塞尔曲线都好办,唯 ... -
swing的拖拽(dnd)的简单实现
2011-03-28 10:18 2008这几天项目需要用到dnd,API比较麻烦.在网上找了很多,都只 ... -
自用的MD5计算工具
2011-03-11 15:45 1783/** * 检查输入流的MD5值是否符合.如果MD5为 ... -
用jsoup分析下载巨鲸的mp3
2011-02-25 15:37 1727这两天突然想听听杰克逊的歌.首选当然是巨鲸. 支持正版. ... -
获取子类的泛型参数
2011-01-27 16:03 1358用的时候不好找,今天看nutz的dao的源码看到了,摘出来备份 ... -
简单的通过注解运行的dao
2011-01-26 11:47 1792项目是个老项目,是个比较简单,但是编码比较凌乱的项目.数据库字 ... -
java模拟js的escape和unescape函数
2011-01-05 10:43 3468这个是在网上找的代码,然后修改了下.作用标题已经很明显了. ... -
自己写的多线程对象池
2010-12-10 16:53 1322/** * 排版器的一个公用接口 <br> ... -
apache poi读取excel中的颜色,真是坑爹啊
2010-12-01 16:23 16973工作原因,需要使用poi来读取excel中的所有内容. 其他 ...
相关推荐
资源名:三菱PLC物流分拣程序源码 资源类型:程序源代码 源码说明: 每个分拣道口之前有个对射光电,通过三菱Q系列PLC的数据表格指令来实现包裹的自动分拣到每个不同的道口。 适合人群:新手及有一定经验的开发人员
每个分拣道口之前有个对射光电,通过三菱Q系列PLC的数据表格指令来实现包裹的自动分拣到每个不同的道口。
简单的数据处理分析
一个库卡按需物料抓取程序.3.1版本,两种物料的需求量随便变化托盘物料数量可以增加外部自动程序。带初始化
《机器人分拣工作站PLC控制程序(西门子)详解》 在自动化行业中,PLC(可编程逻辑控制器)扮演着至关重要的角色,它能够精确地控制设备的运行,提高生产效率。本篇将深入探讨一个针对“机器人分拣工作站”的西门子...
标题“流分拣程序.rar_plc分拣_分拣_分拣控制_分拣系统_物流分拣”揭示了这个压缩包文件的核心内容,即一个基于PLC的物流分拣程序设计。描述中的“plc控制系统,plc物流分拣控制系统”进一步强调了PLC在物流分拣系统...
PLC 颜色分拣实验程序
标题中的“两斜槽成套分拣_分拣设备程序_fx3uPLC_fx3u_PLC程序_”表明这是一个关于使用三菱FX3U PLC控制的分拣系统,特别是涉及两个倾斜槽的分拣设备。这个系统可能用于自动化生产线上的物品分类、定向或分配。下面...
别人的颜色分拣机程序使用lego自带的软件编制的
C++毕业设计快递分拣机器人系统源码实现一个快递分拣机器人。基于OpenCV图像识别技术实现快递信息的识别以及二维码的道路节点信息识别,9轴陀螺仪的姿态获取技术来作为底层小车的运动控制实现直走以及精确的转向,...
重量分拣仿真项目,博途1500程序及设计说明,Factory IO场景 在这个场景中我们需要实现通过此部分的物料可以被测重并通过中间的分拣装置分拣到三个方向的传送带上面。控制柜需要实现手动单次分拣与自动多次分拣的...
标题中的“称重分拣触摸屏程序”指的是用于工业自动化领域的控制系统,特别是涉及物流、生产线上物品重量检测和分类的设备。触摸屏程序是该系统的人机交互界面,允许操作员直观地输入指令和查看设备运行状态。威纶MT...
压缩包内的“传送分拣”可能是项目文件名,可能包含具体的PLC程序代码、工程配置、图纸或者教程文档,这些内容会详细展示如何通过PLC来控制分拣系统的传送部分,可能涉及传感器检测、电机驱动、逻辑控制等多个方面。...
标题 "FX5U-机械手_分拣程序.rar" 暗示了这是一个与FX5U系列PLC(可编程逻辑控制器)相关的项目,其中包含了用于控制机械手进行分拣任务的程序。FX5U是三菱电机推出的一种高级微型PLC,具有强大的处理能力和丰富的...
主程序负责系统初始化和启动/停止控制,指示灯子程序控制系统运行指示灯,而分拣子程序是整个程序的核心。分拣子程序通过光电传感器检测到的信号来控制变频器的启停,变频器进而控制传送带,实现对多肉植物尺寸分类...
在实际应用中,可通过简单的程序修改,实现对不同物料的分拣,这使得系统具有较高的灵活性和适应性,符合现代工业自动化生产的需求。 作为参考文献,本文所描述的物料分拣系统设计与实现的相关技术与方法,可以为...
在这个分拣站程序中,我们可能使用的是FX系列,因为这类小型PLC适合控制简单到中等复杂的系统,如分拣线。 分拣站程序的设计通常包括以下几个关键部分: 1. 输入/输出(I/O)配置:PLC需要接收来自传感器、按钮和...
本文以亚龙集团生产的YL-235A机电一体化设备为基础,针对输送带上同时出现的四个物料(金属物料、白色物料和黑色物料等),提出了相应的检测与分拣的控制要求,并给出了一套基于PLC的检测与分拣程序设计方案。...
料箱输送线程序,有合流和分拣, 精华部分是WCS和PLC的Socket接口和分拣控制程序 提供设备布局图和电气图纸以及博途V16程序。 程序源自欧企,无加密,外企程序还是比较美观的,程序仅供学习参考,不讲解 硬件配置:...
摆轮分拣线程序1500PLC是工业自动化领域中常见的应用,主要用于物流、仓储等行业的货物分拣作业。这里的"1500PLC"通常指的是西门子S7-1500系列的可编程逻辑控制器,这是一种高性能、高可靠性的工业控制设备。西门子...