Análisis de ideas:
Debido a que debe haber un panel de operación y una barra de progreso, deben aparecer dos formas que heredan la clase Jframe.
Primero mire el formulario de barra de progreso llamado. Debido a las operaciones de archivos de diseño, se deben atrapar excepciones. Primero cree un objeto de archivo basado en el archivo que se copiará, y cree un objeto de archivo basado en la dirección guardada del archivo copiado, luego cree un objeto FileOutputStream, luego cree un objeto FileInputStream, seguido de un objeto ProgressMonitorInputStream y luego lea el Archivo. A continuación, defina la matriz de bytes, luego use el bucle While para leer el archivo, use el método Write () de la clase FileOutputStream para escribir datos a través de la secuencia, luego use el método Close () de la clase FileOutputStream para cerrar la transmisión de salida, y Finalmente, use el método Cerrar () de la clase ProgressMonitorInputStream para cerrar la secuencia de entrada. Se puede ver que este método requiere tres parámetros: aparece su ventana principal, la dirección del archivo para copiar y la carpeta a copiar.
El código es el siguiente:
ProgressMonitortest.java:
La copia del código es la siguiente:
paquete cn.edu.xidian.crytoll;
import java.io.fileInputStream;
import java.io.*;
import javax.swing.jframe;
import javax.swing.ProgressMonitorInputStream;
clase pública ProgressMonitortest {
public void useProgressMonitor (Jframe Frame, String CopyPath, String NewPath) {
intentar {
Archivo archivo = nuevo archivo (copypath);
Archivo newfile = nuevo archivo (NewPath); // Crear objeto de archivo basado en la dirección guardada del archivo copiado
FileOutputStream FOP = nuevo FileOutputStream (NewFile);
InputStream in = new FileInputStream (archivo);
// Lea el archivo.
ProgressMonitorInputStream PM = nuevo ProgressMonitorInputStream (
marco, "Lectura de archivos, por favor espere ...", in);
int c = 0;
byte [] bytes = nuevo byte [1024];
while ((c = pm.read (bytes))! = -1) {// bucle para leer el archivo
fop.write (bytes, 0, c);
}
fop.close ();
pm.close ();
} Catch (Exception Ex) {
Ex.PrintStackTrace ();
}
}
}
3. Mira la forma principal de nuevo. No hace falta decir que JLabel y JTextfield son los dos botones, seleccionando archivos y seleccionar carpetas, también son comunes. nuevo. Su tío.
4. En el método específico para iniciar el botón Copiar, primero cree un objeto de subproceso como un nuevo hilo, luego llame al método Start () del objeto, sobrecarga el método run (), cree un objeto de barra de progreso en el método, use el El método getText () de la clase JTextfield obtiene la dirección del archivo que se copia y la ruta a la que se copiará, y luego llama al método en la clase de barra de progreso.
El código es el siguiente:
La copia del código es la siguiente:
paquete cn.edu.xidian.crytoll;
import java.awt.borderlayut;
import java.awt.desktop;
import java.awt.dimension;
import java.awt.eventqueue;
import java.awt.gridbagConstraints;
import java.awt.gridbagLayout;
importar java.awt.insets;
import java.awt.event.actionEvent;
import java.awt.event.actionListener;
import java.io.file;
import java.io.filenotfoundException;
import java.io.filreader;
import java.io.filewriter;
import java.io.ioException;
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.jTextfield;
import javax.swing.border.emptyborder;
import javax.swing.filechooser.filenameExtensionFilter;
clase pública UsermonitorFrame extiende los implementos de Jframe runnable {
/**
*
*/
Private Static Final Long SerialVersionUid = 8674569541853793419l;
JPANEL ContentPane privado;
privado jtextfield filefield;
Private JTextfield SearchTextfield;
Private JTextfield ReemplazetTextField;
archivo de archivo privado;
Private JTextfield Textfield;
privado jtextfield textfield_1;
/**
* Iniciar la aplicación.
*/
public static void main (string [] args) {
EventQueue.invokelater (new Runnable () {
public void run () {
intentar {
UsermonitorFrame frame = new UsermonitorFrame ();
Frame.SetVisible (verdadero);
} Catch (Exception e) {
E.PrintStackTrace ();
}
}
});
}
/**
* Crea el marco.
*/
Public UsermonitorFrame () {
setResizable (falso);
setDefaultCloseOperation (jframe.exit_on_close);
SetBounds (100, 100, 501, 184);
settitle ("Use la barra de progreso al leer un archivo");
getContentPane (). SetLayout (nulo);
Jlabel Label = new JLabel ("/U6587/U4EF6/U5730/U5740/Uff1a");
Label.setBounds (10, 10, 70, 15);
getContentPane (). add (etiqueta);
TextField = new JTextField ();
TextField.setBounds (90, 7, 300, 21);
getContentPane (). add (textField);
TextField.SetColumns (10);
JButton Button = new JButton ("/U9009/U62E9/U6587/U4EF6");
Button.AdDactionListener (new ActionListener () {
public void Actionperformed (ActionEvent E) {
do_button_actionperformed (e);
}
});
botón.setBounds (400, 6, 93, 23);
getContentPane (). Agregar (botón);
JLabel Label_1 = new JLabel ("/U590D/U5236/U5730/U5740/Uff1a");
etiqueta_1.setBounds (10, 40, 70, 15);
getContentPane (). add (etiqueta_1);
textField_1 = new JTextField ();
textField_1.setBounds (90, 38, 300, 21);
getContentPane (). add (textField_1);
TextField_1.SetColumns (10);
JButton Button_1 = new JButton ("/U9009/U62E9/U5730/U5740");
Button_1.addactionListener (new ActionListener () {
public void Actionperformed (ActionEvent E) {
do_button_1_actionperformed (e);
}
});
Button_1.setBounds (400, 39, 93, 23);
getContentPane (). add (Button_1);
JButton Button_2 = new JButton ("/U5F00/U59CB/U590D/U5236");
Button_2.addactionListener (new ActionListener () {
public void Actionperformed (ActionEvent E) {
do_CopyButton_ActionPerformed (e);
}
});
Button_2.setBounds (182, 69, 93, 23);
getContentPane (). add (Button_2);
}
protegido void do_button_actionperformed (ActionEvent E) {
Jfilechooser chooser = new Jfilechooser ();
Chooser.setFilesElectionMode (jfilechooser.files_only);
// Mostrar cuadro de diálogo de apertura de archivo
int option = Chooser.showopendialog (this);
// Asegúrese de que el usuario presione el botón Abrir en lugar del botón Cancelar
if (opción! = jfilechooser.approve_option)
devolver;
// Obtener el objeto de archivo seleccionado por el usuario
file = chooser.getSelectedFile ();
// Mostrar información del archivo en el cuadro de texto
textField.settext (file.ToString ());
}
protegido void do_button_1_actionperformed (ActionEvent E) {
Jfilechooser chooser = new Jfilechooser ();
Chooser.setFilesElectionMode (jfilechooser.Directorios_only);
int option = Chooser.showopendialog (this);
if (opción! = jfilechooser.approve_option)
devolver;
file = chooser.getSelectedFile ();
textField_1.settext (file.ToString ());
}
// Confirma el evento de clic del botón Copiar
protegido void do_copybutton_actionperformed (ActionEvent Arg0) {
Hilo de hilo = nuevo hilo (esto);
Thread.Start ();
}
// Utilice la tecnología de subprocesos múltiples para realizar la operación de lectura
@Anular
public void run () {
ProgressMonitortest test = new ProgressMonitortest ();
String ruta = textField.gettext ();
String save = textField_1.gettext ();
test.useProgressMonitor (this, ruta, save+rath.substring (rath.lastindexof ("."), rath.length ()));
}
}