精华内容
下载资源
问答
  • 批量 重命名 文件 批量 重命名 文件 批量 重命名 文件 批量 重命名 文件 批量 重命名 文件 批量 重命名 文件 批量 重命名 文件 批量 重命名 文件
  • 文件批量重命名

    2014-02-18 10:18:43
    文件批量重命名
  • 深蓝文件批量重命名工具是一款文件批量改名(重命名)软件。深蓝文件批量重命名工具软件特色:1、支持批量插入文字、插入序号、替换字符、文件名转大小写等,插入位置可随意控
  • 深蓝文件批量重命名,批量文件重命名删除替换插入。深蓝文件批量重命名,批量文件重命名删除替换插入。深蓝文件批量重命名,批量文件重命名删除替换插入。
  • Windows操作系统可以实现重命名文件操作,却不能实现批量重命名。本实例实现了批量重命名功能,可以将一个文件夹内同一类型的文件按照一定的规则批量重命名。用户可以给出重命名模板,程序可以根据模板对相应的文件...

    Windows操作系统可以实现重命名文件操作,却不能实现批量重命名。本实例实现了批量重命名功能,可以将一个文件夹内同一类型的文件按照一定的规则批量重命名。用户可以给出重命名模板,程序可以根据模板对相应的文件进行重命名。此外,还可以在重命名模板中添加特殊符号,程序会将这些特殊符号替换成重命名后的文件编号。

    思路分析:

    1.先看视图层,需要一些JLabel控件分别显示指示用户的信息,三个JTextField控件分别显示所选路径、输入文件名模板即输入扩展名,两个JButton控件分别用来浏览文件夹和开始重命名,一个JSeparator控件表示分割线,一个JSpinner控件代表开始编号,一个JScrollPane控件作为容器,在里面放置一个JTable控件列出旧文件名和新文件名。

    2.再看模型层。首先定义浏览按钮的事件处理方法,在该方法中创建一个JFileChooser文件选择器,使用JFileChooser类的setFileSelectionMode()方法设置只选择文件夹,通过JFileChooser类的showOpenDialog()显示打开对话框,若用户点击确认按钮则使用JFileChooser类的getSelectedFile()方法获取选中的文件夹,最后使用JTextField控件的setText()方法显示文件夹信息。

    3.定义一个类来实现FileFilter接口,在该类的构造方法中保存文件扩展名,然后定义一个方法,在该方法中使用String类的endsWith()方法来过滤文件扩展名。

    4.然后定义开始按钮的事件处理方法,首先使用JTextField控件的getText()方法获取模板字符串,若为空则通过JOptionPane类的showMessageDialog()方法提示用户输入模板,然后创建DefaultTableModel对象并使用JTable类的getModel()方法获取表格数据模型,用JTable类的setRowCount(0);方法清除表格数据,使用JSpinner类的getValue()方法获取起始编号,使用String类的indexOf方法获取第一个“#”的索引,使用String类的substring()方法获取模板中数字占位字符串,使用String类的replace()方法把模板中数字占位字符串替换为指定格式,为了规范使用String类的toLowerCase()方法将用户输入的扩展名转换为小写形式,若用户未输入“.”则补上,然后使用File类的listFiles()方法获取文件夹中的文件列表数组,使用foreach()循环遍历每个文件,通过String类的format()方法格式化每个文件名称,使用DefaultTableModel类的addRow()方法把文件的旧名称和新名称添加到表格的数据模型中,使用File类的getParentFile()方法获取目标文件所在的文件夹对象,创建一个File对象并初始化为新的文件名,最后使用File类的renameTo()方法实现文件重命名。

    代码如下:

    import java.awt.EventQueue;

    import java.awt.event.ActionEvent;

    import java.awt.event.ActionListener;

    import java.io.File;

    import java.io.FileFilter;

    import javax.swing.JButton;

    import javax.swing.JFileChooser;

    import javax.swing.JFrame;

    import javax.swing.JLabel;

    import javax.swing.JOptionPane;

    import javax.swing.JPanel;

    import javax.swing.JScrollPane;

    import javax.swing.JSeparator;

    import javax.swing.JSpinner;

    import javax.swing.JTable;

    import javax.swing.JTextField;

    import javax.swing.border.EmptyBorder;

    import javax.swing.table.DefaultTableModel;

    import java.awt.GridBagLayout;

    import java.awt.GridBagConstraints;

    import java.awt.Insets;

    /**

    * 获取文件列表的过滤器

    *

    * @author 李钟尉

    */

    public class RenameFiles extends JFrame {

    /**

    *

    */

    private static final long serialVersionUID = 4534371106024773867L;

    private final class ExtNameFileFilter implements FileFilter {

    private String extName;

    public ExtNameFileFilter(String extName) {

    this.extName = extName;// 保存文件扩展名

    }

    @Override

    public boolean accept(File pathname) {

    // 过滤文件扩展名

    if (pathname.getName().toUpperCase()

    .endsWith(extName.toUpperCase()))

    return true;

    return false;

    }

    }

    private JPanel contentPane;

    private JTextField forderField;

    private JTextField templetField;

    private File dir;

    private JTable table;

    private JTextField extNameField;

    private JSpinner startSpinner;

    /**

    * Launch the application.

    */

    public static void main(String[] args) {

    EventQueue.invokeLater(new Runnable() {

    public void run() {

    try {

    RenameFiles frame = new RenameFiles();

    frame.setVisible(true);

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    });

    }

    /**

    * Create the frame.

    */

    public RenameFiles() {

    setResizable(false);

    setTitle("文件批量重命名");

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    setBounds(100, 100, 383, 409);

    contentPane = new JPanel();

    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

    setContentPane(contentPane);

    GridBagLayout gbl_contentPane = new GridBagLayout();

    gbl_contentPane.columnWidths = new int[] { 72, 54, 60, 87, 91, 0 };

    gbl_contentPane.rowHeights = new int[] { 25, 25, 10, 25, 24, 25, 2,

    216, 0 };

    gbl_contentPane.columnWeights = new double[] { 0.0, 0.0, 0.0, 0.0, 0.0,

    Double.MIN_VALUE };

    gbl_contentPane.rowWeights = new double[] { 0.0, 0.0, 0.0, 0.0, 0.0,

    0.0, 0.0, 0.0, Double.MIN_VALUE };

    contentPane.setLayout(gbl_contentPane);

    JLabel label = new JLabel();

    label.setText("文件批量重命名模块:");

    GridBagConstraints gbc_label = new GridBagConstraints();

    gbc_label.fill = GridBagConstraints.VERTICAL;

    gbc_label.insets = new Insets(0, 0, 5, 5);

    gbc_label.gridwidth = 3;

    gbc_label.gridx = 1;

    gbc_label.gridy = 0;

    contentPane.add(label, gbc_label);

    JLabel label_1 = new JLabel();

    label_1.setText("文件路径:");

    GridBagConstraints gbc_label_1 = new GridBagConstraints();

    gbc_label_1.anchor = GridBagConstraints.EAST;

    gbc_label_1.fill = GridBagConstraints.VERTICAL;

    gbc_label_1.insets = new Insets(0, 0, 5, 5);

    gbc_label_1.gridx = 0;

    gbc_label_1.gridy = 1;

    contentPane.add(label_1, gbc_label_1);

    forderField = new JTextField();

    forderField.setText("");

    GridBagConstraints gbc_forderField = new GridBagConstraints();

    gbc_forderField.fill = GridBagConstraints.HORIZONTAL;

    gbc_forderField.insets = new Insets(0, 0, 5, 5);

    gbc_forderField.gridwidth = 3;

    gbc_forderField.gridx = 1;

    gbc_forderField.gridy = 1;

    contentPane.add(forderField, gbc_forderField);

    JButton button = new JButton();

    button.addActionListener(new ActionListener() {

    public void actionPerformed(ActionEvent e) {

    do_button_actionPerformed(e);

    }

    });

    button.setText("浏览");

    GridBagConstraints gbc_button = new GridBagConstraints();

    gbc_button.anchor = GridBagConstraints.NORTHWEST;

    gbc_button.insets = new Insets(0, 0, 5, 0);

    gbc_button.gridx = 4;

    gbc_button.gridy = 1;

    contentPane.add(button, gbc_button);

    JSeparator separator_1 = new JSeparator();

    GridBagConstraints gbc_separator_1 = new GridBagConstraints();

    gbc_separator_1.fill = GridBagConstraints.BOTH;

    gbc_separator_1.insets = new Insets(0, 0, 5, 0);

    gbc_separator_1.gridwidth = 5;

    gbc_separator_1.gridx = 0;

    gbc_separator_1.gridy = 2;

    contentPane.add(separator_1, gbc_separator_1);

    JLabel label_5 = new JLabel();

    label_5.setText("使用#可以指定数字计数所占的位置,使用*可以插入原文件名:");

    GridBagConstraints gbc_label_5 = new GridBagConstraints();

    gbc_label_5.fill = GridBagConstraints.VERTICAL;

    gbc_label_5.insets = new Insets(0, 0, 5, 0);

    gbc_label_5.gridwidth = 5;

    gbc_label_5.gridx = 0;

    gbc_label_5.gridy = 3;

    contentPane.add(label_5, gbc_label_5);

    JLabel label_3 = new JLabel();

    label_3.setText("  模板:");

    GridBagConstraints gbc_label_3 = new GridBagConstraints();

    gbc_label_3.anchor = GridBagConstraints.EAST;

    gbc_label_3.fill = GridBagConstraints.VERTICAL;

    gbc_label_3.insets = new Insets(0, 0, 5, 5);

    gbc_label_3.gridx = 0;

    gbc_label_3.gridy = 4;

    contentPane.add(label_3, gbc_label_3);

    templetField = new JTextField();

    templetField.setText("catrestaurant###");

    GridBagConstraints gbc_templetField = new GridBagConstraints();

    gbc_templetField.anchor = GridBagConstraints.SOUTH;

    gbc_templetField.fill = GridBagConstraints.HORIZONTAL;

    gbc_templetField.insets = new Insets(0, 0, 5, 5);

    gbc_templetField.gridwidth = 3;

    gbc_templetField.gridx = 1;

    gbc_templetField.gridy = 4;

    contentPane.add(templetField, gbc_templetField);

    JLabel label_4 = new JLabel();

    label_4.setText("开始于:");

    GridBagConstraints gbc_label_4 = new GridBagConstraints();

    gbc_label_4.fill = GridBagConstraints.VERTICAL;

    gbc_label_4.insets = new Insets(0, 0, 5, 5);

    gbc_label_4.gridx = 0;

    gbc_label_4.gridy = 5;

    contentPane.add(label_4, gbc_label_4);

    startSpinner = new JSpinner();

    GridBagConstraints gbc_startSpinner = new GridBagConstraints();

    gbc_startSpinner.fill = GridBagConstraints.HORIZONTAL;

    gbc_startSpinner.insets = new Insets(0, 0, 5, 5);

    gbc_startSpinner.gridx = 1;

    gbc_startSpinner.gridy = 5;

    contentPane.add(startSpinner, gbc_startSpinner);

    JLabel label_2 = new JLabel();

    label_2.setText("  扩展名:");

    GridBagConstraints gbc_label_2 = new GridBagConstraints();

    gbc_label_2.fill = GridBagConstraints.HORIZONTAL;

    gbc_label_2.insets = new Insets(0, 0, 5, 5);

    gbc_label_2.gridx = 2;

    gbc_label_2.gridy = 5;

    contentPane.add(label_2, gbc_label_2);

    JButton startButton = new JButton();

    startButton.addActionListener(new ActionListener() {

    public void actionPerformed(ActionEvent e) {

    do_startButton_actionPerformed(e);

    }

    });

    extNameField = new JTextField();

    extNameField.setText("jpg");

    GridBagConstraints gbc_extNameField = new GridBagConstraints();

    gbc_extNameField.fill = GridBagConstraints.HORIZONTAL;

    gbc_extNameField.insets = new Insets(0, 0, 5, 5);

    gbc_extNameField.gridx = 3;

    gbc_extNameField.gridy = 5;

    contentPane.add(extNameField, gbc_extNameField);

    startButton.setText("开始");

    GridBagConstraints gbc_startButton = new GridBagConstraints();

    gbc_startButton.anchor = GridBagConstraints.NORTH;

    gbc_startButton.insets = new Insets(0, 0, 5, 0);

    gbc_startButton.gridx = 4;

    gbc_startButton.gridy = 5;

    contentPane.add(startButton, gbc_startButton);

    JSeparator separator_2 = new JSeparator();

    GridBagConstraints gbc_separator_2 = new GridBagConstraints();

    gbc_separator_2.anchor = GridBagConstraints.NORTH;

    gbc_separator_2.fill = GridBagConstraints.HORIZONTAL;

    gbc_separator_2.insets = new Insets(0, 0, 5, 0);

    gbc_separator_2.gridwidth = 5;

    gbc_separator_2.gridx = 0;

    gbc_separator_2.gridy = 6;

    contentPane.add(separator_2, gbc_separator_2);

    JScrollPane scrollPane = new JScrollPane();

    GridBagConstraints gbc_scrollPane = new GridBagConstraints();

    gbc_scrollPane.fill = GridBagConstraints.BOTH;

    gbc_scrollPane.gridwidth = 5;

    gbc_scrollPane.gridx = 0;

    gbc_scrollPane.gridy = 7;

    contentPane.add(scrollPane, gbc_scrollPane);

    table = new JTable();

    table.setModel(new DefaultTableModel(new Object[][] {}, new String[] {

    "旧文件名", "新文件名" }));

    scrollPane.setViewportView(table);

    }

    /**

    * 浏览按钮的事件处理方法

    *

    * @param e

    */

    protected void do_button_actionPerformed(ActionEvent e) {

    JFileChooser chooser = new JFileChooser();// 创建文件选择器

    // 设置只选择文件夹

    chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

    int option = chooser.showOpenDialog(this);// 显示打开对话框

    if (option == JFileChooser.APPROVE_OPTION) {

    dir = chooser.getSelectedFile();// 获取选择的文件夹

    } else {

    dir = null;

    }

    forderField.setText(dir + "");// 显示文件夹信息

    }

    /**

    * 开始按钮的事件处理方法

    *

    * @param e

    */

    protected void do_startButton_actionPerformed(ActionEvent e) {

    String templet = templetField.getText();// 获取模板字符串

    if (templet.isEmpty()) {

    JOptionPane.showMessageDialog(this, "请确定重命名模板", "信息对话框",

    JOptionPane.WARNING_MESSAGE);

    return;

    }

    // 获取表格数据模型

    DefaultTableModel model = (DefaultTableModel) table.getModel();

    model.setRowCount(0);// 清除表格数据

    int bi = (Integer) startSpinner.getValue();// 获取起始编号

    int index = templet.indexOf("#");// 获取第一个“#”的索引

    String code = templet.substring(index);// 获取模板中数字占位字符串

    // 把模板中数字占位字符串替换为指定格式

    templet = templet.replace(code, "%0" + code.length() + "d");

    String extName = extNameField.getText().toLowerCase();

    if (extName.indexOf(".") == -1)

    extName = "." + extName;

    // 获取文件中文件列表数组

    File[] files = dir.listFiles(new ExtNameFileFilter(extName));

    for (File file : files) {// 变量文件数组

    // 格式化每个文件名称

    String name = String.format(templet, bi++) + extName;

    // 把文件的旧名称与新名称添加到表格的数据模型

    model.addRow(new String[] { file.getName(), name });

    File parentFile = file.getParentFile();// 获取文件所在文件夹对象

    File newFile = new File(parentFile, name);

    file.renameTo(newFile);// 文件重命名

    }

    }

    }

    效果如图:

    cf11aad31f064c77b9c6762c3c9e32ee.png

    展开全文
  • 文件批量重命名工具

    2019-01-09 14:27:42
    文件批量重命名工具
  • 文件 批量重命名

    2011-12-19 20:59:33
    前几天要处理一些图片资料,从看到有人提供了一个批处理的方法,但是只能处理单个目录下的文件命名,我给.../** * 文件 批量重命名 * @author * */public class BatchRenameFile { //输出日志 public static volati...

    前几天要处理一些图片资料,从看到有人提供了一个批处理的方法,但是只能处理单个目录下的文件命名,我给改动了一下变成可以递归处理很多层目录了,算是半个原创,跟大家分享一下~~

     

     

    import java.io.File;
    /**
    * 文件 批量重命名
    * @author
    *
    */
    public class BatchRenameFile {
    //输出日志
    public static volatile boolean isDebug = false;
    private static int j=0;
    public static void main(String[] args) {
    // String root = "C:/Users/hello/Documents/android/方案/upload/hd_imgfile_rename";//文件夹目录
    String root = "C:/Users/hello/Documents/android/方案/upload/test";//文件夹目录
    File [] fs = new File(root).listFiles();

    String newName = "a";
    System.out.println();
    BatchRenameFile.isDebug = true;
    try {
    rename(fs,newName);
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    /**
    * 批量 重命名 文件名
    * @param files 文件列表(文件夹或文件)
    * @param newName 新文件名
    * @throws Exception 可能的异常
    */
    public static void rename(File [] files ,String newName) throws Exception {
    if(files == null || newName == null || newName.trim().length()==0){
    return;
    }
    for(int i=0 ; i< files.length ; i++){
    if(files[i] != null && files[i].exists()){
    File f = files[i];

    int lastIndex = f.getAbsolutePath().lastIndexOf(File.separator);
    //父目录
    String path = f.getAbsolutePath().substring(0 , lastIndex+1);
    if(f.isFile()){
    //文件,保持后缀名
    String extensions = f.getName().lastIndexOf(".") >0 ?
    ( f.getName().substring(f.getName().lastIndexOf(".")) ) : "";
    f.renameTo(new File(path + newName +j+ extensions));
    j++;
    if(isDebug){
    System.out.println("文件["+f.getName()+"],重命名为["+ path + newName+j+extensions+"]");
    }
    }else{

    //改动处
    File [] fs = new File(f.getAbsolutePath()).listFiles();
    rename(fs, newName);
    //文件夹
    // f.renameTo(new File(path + newName));
    // if(isDebug){
    // System.out.println("文件夹["+f.getName()+"],重命名为["+ path + newName+"]");
    // }
    }
    }
    }
    }
    }

    展开全文
  • 当然有,不用借助第三方工具,轻松玩转给文件批量重命名。选择好要改名的照片文件,按F2键(推荐),或者在已选择的任意一个照片文件上点鼠标右键,点“重命名”,输入新的文件名,按回车立即完成批量重命名,变成如...

    应用场景:出去游玩照了一堆照片,想进行整理归类,按照游玩的主题给照片改名,一个一个照片文件改名太累人了,有没有什么好办法呢?

    当然有,不用借助第三方工具,轻松玩转给文件批量重命名。

    选择好要改名的照片文件,按F2键(推荐),或者在已选择的任意一个照片文件上点鼠标右键,点“重命名”,输入新的文件名,按回车立即完成批量重命名,变成如“新的文件名 (n)”的形式,n是数字,自动从1排起。WindowsXP/7/8/10都支持这个功能,不过XP的有点小Bug。

    992af5bcd14142498c3a38ed66d264f2

    批量重命名

    小技巧:

    如果改名过程手误输入了错误的文件名,或者说对新的文件名不满意,可以按Ctrl+Z,恢复原来的文件名。也可以点鼠标右键,选择“撤消 重命名”。当然,不撤消也是可以的,直接再次批量重命名。

    394fd797dc5e413187f3bde38e5157b9

    撤消重命名

    系统自带的批量重命名功能比较弱,如果需要改前缀、改后缀、替换、大小写转换、删除符号、添加数字序号、删除数字、字符、甚至根据mp3文件的ID3标签重命名等复杂功能,还是得借助第三方工具。

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,093
精华内容 1,637
关键字:

文件批量重命名