El sistema operativo de Windows puede implementar los archivos de cambio de nombre, pero no puede implementar el cambio de nombre de lotes. Este ejemplo implementa la función de cambio de nombre de lotes y puede cambiar el nombre de archivos del mismo tipo en una carpeta de acuerdo con ciertas reglas. Los usuarios pueden dar el nombre de las plantillas, y los programas pueden cambiar el nombre de los archivos correspondientes de acuerdo con las plantillas. Además, puede agregar símbolos especiales a la plantilla de cambio de nombre, y el programa reemplazará estos símbolos especiales con el número de archivo renombrado.
Análisis de ideas:
1. Primero mire la capa de vista. Repetición de inicio.
2. Mira la capa del modelo nuevamente. Primero, defina el método de manejo de eventos del botón de navegación, cree un selector de archivos Jfilechooser En este método, use el método setFilesElectionMode () de la clase jfilechooser para establecer solo carpetas selectas y muestre el cuadro de diálogo abierto a través del showopendialog () de la parte del JFILECHOOSER CLASS.
3. Defina una clase para implementar la interfaz FileFilter, guarde la extensión del archivo en el constructor de la clase y luego defina un método, en el que el método Endswith () de la clase de cadena se usa para filtrar la extensión del archivo.
4. Luego, defina el método de manejo de eventos del botón de inicio. Método de la clase JoptionPane, y luego cree un objeto predeterminado y use la clase JTable. () Método de la clase JSpinner para obtener el número de inicio, y use el método índice de la clase de cadena para obtener el primer "#" El índice del método Substring () de la clase de cadena se usa para obtener la cadena de marcador de posición número en la plantilla , y el método de reemplazo () de la clase de cadena se usa para obtener la cadena número de marcador de posición en la plantilla. Reemplace la cadena de marcador de posición en la plantilla con el formato especificado. Luego use el método de clases de archivos listFiles () Obtiene la matriz de lista de archivos en la carpeta, usa foreach () para recorrer cada archivo, formatear cada nombre de archivo a través del método format () de la clase de cadena y usa el método addrow () de la clase DefaultTableModel para convertir el archivo anterior, agregue el nombre y el nuevo nombre al modelo de datos de la tabla. a un nuevo nombre de archivo y finalmente use el método Renameto () del cambio de nombre de archivo de la clase de archivo.
El código es el siguiente:
La copia del código es la siguiente:
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;
importar java.awt.insets;
/**
* Obtenga el filtro para la lista de archivos
*
* @author li zhongwei
*/
Public Class RenameFiles extiende Jframe {
/**
*
*/
Private static final Long SerialVersionUid = 4534371106024773867L;
Clase final privada ExtNameFileFilter implementa FileFilter {
Nombre de extinción de cadena privada;
public ExtNameFileFilter (String ExtName) {
this.extname = extname; // Guardar extensión de archivo
}
@Anular
Public boolean Acept (archivo PathName) {
// Filtrar extensiones de archivo
if (pathName.getName (). TOUPPERCASE ()
.endswith (ExtName.ToUpperCase ()))
devolver verdadero;
devolver falso;
}
}
JPANEL ContentPane privado;
Privado JTextfield Forwardfield;
Privado JTextfield Templetfield;
Dir de archivo privado;
mesa privada jtable;
privado jtextfield extnamefield;
Private JSpinner Startspinner;
/**
* Iniciar la aplicación.
*/
public static void main (string [] args) {
EventQueue.invokelater (new Runnable () {
public void run () {
intentar {
RenameFiles frame = new RenameFiles ();
Frame.SetVisible (verdadero);
} Catch (Exception e) {
E.PrintStackTrace ();
}
}
});
}
/**
* Crea el marco.
*/
público renameFiles () {
setResizable (falso);
settitle ("Renaming de lotes de archivo");
setDefaultCloseOperation (jframe.exit_on_close);
SetBounds (100, 100, 383, 409);
contentPane = new JPanel ();
ContentPane.setBorder (nuevo vacío (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, doble.min_value};
contentPane.setLayout (GBL_ContentPane);
Jlabel etiqueta = new JLabel ();
etiqueta
GridbagConstraints gbc_label = new GridbagConstraints ();
gbc_label.fill = GridbagConstraints.vertical;
gbc_label.insets = nuevos inserciones (0, 0, 5, 5);
gbc_label.gridwidth = 3;
gbc_label.gridx = 1;
gbc_label.gridy = 0;
contentpane.add (etiqueta, gbc_label);
JLabel Label_1 = new JLabel ();
etiqueta_1.settext ("ruta de archivo:");
GridbagConstraints gbc_label_1 = new GridbagConstraints ();
gbc_label_1.anchor = GridbagConstraints.east;
GBC_LABEL_1.FILL = GridbagConstraints.vertical;
gbc_label_1.insets = nuevos inserciones (0, 0, 5, 5);
gbc_label_1.gridx = 0;
gbc_label_1.gridy = 1;
contentPane.add (etiqueta_1, gbc_label_1);
Forderfield = new JTextField ();
Forderfield.settext ("");
GridbagConstraints gbc_forderfield = new GridbagConstraints ();
gbc_forderfield.fill = GridbagConstraints.horizontal;
gbc_forderfield.insets = nuevos inserciones (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 ("Examinar");
GridbagConstraints gbc_button = new GridbagConstraints ();
gbc_button.anchor = GridbagConstraints.northwest;
gbc_button.insets = nuevas inserciones (0, 0, 5, 0);
gbc_button.gridx = 4;
gbc_button.gridy = 1;
contentpane.add (botón, gbc_button);
Jseparator Separator_1 = new Jseparator ();
GridbagConstraints gbc_separator_1 = new GridbagConstraints ();
GBC_SEPARATOR_1.FILL = GridbagConstraints.both;
gbc_separator_1.insets = nuevos inserciones (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 ();
etiqueta_5.settext ("use # para especificar la posición ocupada por el recuento de números y use * para insertar el nombre del archivo original:");
GridbagConstraints gbc_label_5 = new GridbagConstraints ();
gbc_label_5.fill = GridbagConstraints.vertical;
gbc_label_5.insets = nuevos inserciones (0, 0, 5, 0);
gbc_label_5.gridwidth = 5;
gbc_label_5.gridx = 0;
gbc_label_5.gridy = 3;
contentPane.add (etiqueta_5, gbc_label_5);
JLabel Label_3 = new JLabel ();
Label_3.settext ("Template:");
GridbagConstraints gbc_label_3 = new GridbagConstraints ();
gbc_label_3.anchor = GridbagConstraints.east;
GBC_LABEL_3.FILL = GridBagConstraints.vertical;
gbc_label_3.insets = nuevos inserciones (0, 0, 5, 5);
gbc_label_3.gridx = 0;
gbc_label_3.gridy = 4;
contentPane.add (etiqueta_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 = nuevos inserciones (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 ();
etiqueta_4.settext ("inicia:");
GridbagConstraints gbc_label_4 = new GridbagConstraints ();
GBC_LABEL_4.FILL = GridBagConstraints.vertical;
gbc_label_4.insets = nuevos inserciones (0, 0, 5, 5);
gbc_label_4.gridx = 0;
gbc_label_4.gridy = 5;
contentPane.add (etiqueta_4, gbc_label_4);
startspinner = new JSpinner ();
GridbagConstraints gbc_startspinner = new GridbagConstraints ();
gbc_startspinner.fill = GridbagConstraints.horizontal;
gbc_startspinner.insets = nuevos inserciones (0, 0, 5, 5);
gbc_startspinner.gridx = 1;
gbc_startspinner.gridy = 5;
contentPane.Add (startspinner, gbc_startspinner);
JLabel Label_2 = new JLabel ();
etiqueta_2.settext ("extensión:");
GridbagConstraints gbc_label_2 = new GridbagConstraints ();
GBC_LABEL_2.FILL = GridBagConstraints.Horizontal;
gbc_label_2.insets = nuevos inserciones (0, 0, 5, 5);
gbc_label_2.gridx = 2;
gbc_label_2.gridy = 5;
contentpane.add (etiqueta_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 = nuevos inserciones (0, 0, 5, 5);
gbc_extnamefield.gridx = 3;
gbc_extnamefield.gridy = 5;
ContentPane.Add (ExtNameField, GBC_EXTNAMEFIELD);
startButton.settext ("inicio");
GridbagConstraints gbc_startButton = new GridBagConstraints ();
gbc_startbutton.anchor = GridbagConstraints.north;
gbc_startbutton.insets = nuevos inserciones (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 = nuevos inserciones (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);
tabla = new JTable ();
table.setModel (new DefaultTableModel (nuevo objeto [] [] {}, nueva cadena [] {
"Nombre de archivo anterior", "Nombre de archivo nuevo"}));
scrollPane.setViewPortView (tabla);
}
/**
* Cómo manejar el evento de los botones de navegación
*
* @param e
*/
protegido void do_button_actionperformed (ActionEvent E) {
Jfilechooser chooser = new Jfilechooser (); // Cree un selector de archivos
// Establecer solo la selección de carpetas
Chooser.setFilesElectionMode (jfilechooser.Directorios_only);
opción int = chooser.showopendialog (this); // Mostrar cuadro de diálogo Abrir
if (opción == jfilechooser.approve_option) {
dir = chooser.getSelectedFile (); // Obtener la carpeta seleccionada
} demás {
dir = nulo;
}
Forderfield.settext (dir + ""); // Mostrar información de carpeta
}
/**
* Método de manejo de eventos de botón de inicio
*
* @param e
*/
protegido void do_startbutton_actionperformed (ActionEvent E) {
Cadena TEMPLET = TEMPLETFIELD.GETTEXT (); // Obtenga la cadena de plantilla
if (TEMPLET.ISEMPTY ()) {
JOptionPane.ShowMessEdialog (esto, "Confirme la plantilla de cambio de nombre", "cuadro de diálogo de información",
JOpttionPane.Warning_Message);
devolver;
}
// Obtener el modelo de datos de la tabla
DefaultTableModel modelo = (defaultTableModel) table.getModel ();
Model.SetRowCount (0); // Borrar datos de tabla
int bi = (integer) startspinner.getValue (); // Obtener el número de inicio
int index = TEMPLET.IndexOf ("#"); // Obtenga el índice del primer "#"
String Code = TempLet.Substring (index); // Obtenga la cadena número de marcador de posición en la plantilla
// reemplazar la cadena de marcador de posición número en la plantilla con el formato especificado
TEMPLET = TEMPLET.REPLACE (código, "%0" + code.length () + "d");
Cadena extname = extnameField.gettext (). TOlowerCase ();
if (extname.indexof (".") == -1)
extname = "."
// Obtener la matriz de la lista de archivos en el archivo
Archivo [] archivos = dir.listFiles (new ExtNameFileFilter (ExtName));
for (archivo de archivo: archivos) {// matriz de archivos variables
// formatear cada nombre de archivo
Name de cadena = string.format (TempLet, Bi ++)+extname;
// Agregue los nombres antiguos y nuevos del archivo al modelo de datos de la tabla
model.AdDrow (new String [] {file.getName (), name});
Archivo parentFile = file.getParentFile (); // Obtenga el objeto de carpeta donde se encuentra el archivo
Archivo newfile = nuevo archivo (parentFile, nombre);
file.renameto (newfile); // archivo renombrar
}
}
}
El efecto se muestra en la imagen: