Análise de ideias:
Como deve haver um painel de operação e uma barra de progresso, duas formas que herdam a classe JFrame devem aparecer.
Primeiro, olhe para o formulário de barra de progresso chamado. Devido às operações de arquivos de design, as exceções precisam ser capturadas. Primeiro, crie um objeto de arquivo com base no arquivo a ser copiado e crie um objeto de arquivo com base no endereço salvo do arquivo copiado, depois crie um objeto FileOutputStream e, em seguida, crie um objeto FileInputStream, seguido por um objeto ProgressMonitorInputStream e depois leia o Arquivo. Em seguida, defina a matriz de bytes e use o loop while para ler o arquivo, usar o método write () da classe FileOutputStream para gravar dados através do fluxo e usar o método Close () da classe FileOutputStream para fechar o fluxo de saída e Por fim, use o método Close () da classe ProgressMonitorInputStream para fechar o fluxo de entrada. Pode -se observar que esse método requer três parâmetros: a janela dos pais aparece, o endereço do arquivo a ser copiado e a pasta a ser copiada.
O código é o seguinte:
ProgressmonitorTest.java:
A cópia do código é a seguinte:
pacote cn.edu.xidian.crytoll;
importar java.io.fileInputStream;
importar java.io.*;
importar javax.swing.jframe;
importar javax.swing.progressmonitorInputStream;
classe pública ProgressMonitorTest {
public void useprogressmonitor (quadro jframe, string copypath, string newpath) {
tentar {
Arquivo de arquivo = novo arquivo (copypath);
Arquivo newfile = novo arquivo (newPath);
FileOutputStream fop = new FileOutputStream (newFile);
InputStream in = new FileInputStream (arquivo);
// Leia o arquivo.
ProgressMonitorInputStream PM = novo progressoMonitorInputStream (
quadro, "Leitura de arquivo, por favor, espere ...", IN);
int c = 0;
byte [] bytes = novo byte [1024];
while ((c = pm.read (bytes))! = -1) {// loop para ler o arquivo
fop.write (bytes, 0, c);
}
fop.close ();
pm.close ();
} catch (Exceção ex) {
Ex.PrintStackTrace ();
}
}
}
3. Olhe para o formulário principal novamente. Escusado será dizer que Jlabel e JTextfield são os dois botões, selecionando arquivos e selecionando pastas, também são comuns. Novo. O tio dele.
4. No método específico de inicialização do botão de cópia, primeiro crie um objeto Thread como um novo thread e depois chame o método START () do objeto, sobrecarregue o método run (), crie um objeto de barra de progresso no método, use o O método getText () da classe JTextfield obtém o endereço do arquivo a ser copiado e o caminho a ser copiado, e depois chama o método na classe da barra de progresso.
O código é o seguinte:
A cópia do código é a seguinte:
pacote cn.edu.xidian.crytoll;
importar java.awt.borderlayout;
importar java.awt.desktop;
importar java.awt.dimension;
importar java.awt.eventqueue;
importar java.awt.gridbagConstraints;
importar java.awt.gridbaglayout;
importar java.awt.insets;
importar java.awt.event.actionEvent;
importar java.awt.event.actionListener;
importar java.io.file;
importar java.io.filenotfoundException;
importar java.io.fileReader;
importar java.io.filewriter;
importar java.io.ioException;
importar javax.swing.jbutton;
importar javax.swing.jfileChooser;
importar javax.swing.jframe;
importar javax.swing.jlabel;
importar javax.swing.JOptionPane;
importar javax.swing.jpanel;
importar javax.swing.jtextfield;
importar javax.swing.border.emptyborder;
importar javax.swing.FileChooser.FileNameExtensionFilter;
classe pública UserMonitorFrame estende JFrame implementa Runnable {
/**
*
*/
private estático final serialversionUid = 8674569541853793419L;
PRIVADO JPALEL CONTENTPANE;
Private JTextField FileField;
Private JTextfield SearchTextfield;
Private JTextfield ReplaceTextfield;
arquivo de arquivo privado;
Private JTextfield Textfield;
Private jtextfield textfield_1;
/**
* Inicie o aplicativo.
*/
public static void main (string [] args) {
EventQueue.invokelater (new Runnable () {
public void run () {
tentar {
UserMonitorFrame Frame = new UserMonitorFrame ();
frame.setVisible (true);
} catch (Exceção e) {
E.PrintStackTrace ();
}
}
});
}
/**
* Crie o quadro.
*/
public userMonitorFrame () {
setResizable (false);
setDefaultCloseoperation (jframe.exit_on_close);
Setbounds (100, 100, 501, 184);
Settitle ("Use a barra de progresso ao ler um arquivo");
getContentPane (). SetLayout (NULL);
Rótulo jlabel = 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);
Botão jbutton = novo jbutton ("/u9009/u62e9/u6587/u4ef6");
button.addactionListener (new ActionListener () {
public void ActionPormed (ActionEvent E) {
do_button_actionPerformed (e);
}
});
Button.setBounds (400, 6, 93, 23);
getContentPane (). Add (Button);
JLABEL LABEL_1 = novo JLABEL ("/U590D/U5236/U5730/U5740/UFF1A");
Label_1.setbounds (10, 40, 70, 15);
getContentPane (). Add (Label_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 ActionPormed (ActionEvent E) {
do_button_1_actionPerformed (e);
}
});
Button_1.setBounds (400, 39, 93, 23);
getContentPane (). Add (Button_1);
Jbutton button_2 = novo jbutton ("/u5f00/u59cb/u590d/u5236");
Button_2.addactionListener (new ActionListener () {
public void ActionPormed (ActionEvent E) {
do_copyButton_ActionPerformed (e);
}
});
Button_2.setBounds (182, 69, 93, 23);
getContentPane (). Add (Button_2);
}
Void protegido do_button_actionPerformed (ActionEvent e) {
JFILECHOOSER CHOOSER = new JfileChooser ();
chooser.setFileSelectionMode (jfileChooser.files_only);
// Mostrar caixa de diálogo de abertura do arquivo
int option = chooser.showEndialog (this);
// Verifique se o usuário pressiona o botão Abrir em vez do botão Cancelar
if (option! = jfileChooser.Approve_Option)
retornar;
// Obtenha o objeto de arquivo selecionado pelo usuário
arquivo = chooser.getSelectedFile ();
// Mostrar informações de arquivo na caixa de texto
textfield.settext (file.toString ());
}
void protegido do_button_1_actionPerformed (ActionEvent e) {
JFILECHOOSER CHOOSER = new JfileChooser ();
chooser.setFileSelectionMode (jfileChooser.directories_only);
int option = chooser.showEndialog (this);
if (option! = jfileChooser.Approve_Option)
retornar;
arquivo = chooser.getSelectedFile ();
textfield_1.settext (file.toString ());
}
// Confirme o botão de cópia Clique
Void protegido do_copybutton_actionPerformed (ActionEvent Arg0) {
Thread Thread = novo thread (this);
thread.start ();
}
// Use a tecnologia multi-threading para realizar a operação de leitura
@Override
public void run () {
ProgressMonitorTest Test = new ProgressMonitorTest ();
String path = textfield.getText ();
String save = textfield_1.getText ();
test.useProgressMonitor (this, caminho, salvar+path.substring (path.lastIndexOf ("."), path.length ()));
}
}