I have this java code in which I create a graphical interface that copies from one folder to another, now what I need is that when I copy a specific folder, you enter the files in their respective subfolders. How can I do it? I leave what I achieved so far. Thank you in advance.
import com.sun.javafx.logging.JFRInputEvent;
import org.apache.commons.io.FileUtils;
import javax.swing.*;
import java.awt.GridLayout;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class iniciar1 extends JFrame {
JTextField origenFileTextField;
JTextField destinoFileTextField;
public iniciar1() throws HeadlessException {
setTitle("Transferir Archivos");
JLabel sourceFileJLabel = new JLabel("Ruta: ");
origenFileTextField = new JTextField();
JButton origenFileChoserButton = new JButton("Archivos de
Actualizacion");
origenFileChoserButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser jFileChooser = new JFileChooser();
jFileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
int status = jFileChooser.showOpenDialog(iniciar1.this);
if (status == JFileChooser.APPROVE_OPTION) {
String selectedFilePath = jFileChooser.getSelectedFile().getAbsolutePath();
origenFileTextField.setText(selectedFilePath);
}
}
});
JLabel destinoFileJLabel = new JLabel("Ruta: ");
destinoFileTextField = new JTextField();
JButton destinoFileChoserButton = new JButton("Carpeta de Proyectos");
destinoFileChoserButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser jFileChooser = new JFileChooser();
jFileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
int status = jFileChooser.showSaveDialog(iniciar1.this);
if (status == JFileChooser.APPROVE_OPTION) {
String selectedFilePath = jFileChooser.getSelectedFile().getAbsolutePath();
destinoFileTextField.setText(selectedFilePath);
}
}
});
JButton botonCopiar = new JButton("Copiar");
botonCopiar.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
File origenFile = new File(origenFileTextField.getText());
File destinoFile = new File(destinoFileTextField.getText() );
try {
FileUtils.copyDirectory(origenFile,destinoFile);
} catch (IOException ex) {
ex.printStackTrace();
}
}
});
setLayout(new GridLayout(3, 3, 5, 5));
add(sourceFileJLabel);
add(origenFileTextField);
add(origenFileChoserButton);
add(destinoFileJLabel);
add(destinoFileTextField);
add(destinoFileChoserButton);
add(botonCopiar);
}
public static void main(String[] args) {
iniciar1 copyFile = new iniciar1();
copyFile.setSize(400, 150);
copyFile.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
copyFile.setVisible(true);
}
private ArrayList<File> vector = new ArrayList<File>();
public ArrayList<File> listarTodo(File dir)
{
vector.clear();
listarT(dir);
return vector;
}
private void listarT(File dir) {
if (dir.isDirectory()) {
vector.add(dir);
String[] children = dir.list();
for (int i = 0; i < children.length; i++)
listarT(new File(dir, children[i]));
} else
vector.add(dir);
}
private void copiarDirectorio(File directorio, String dirDestino) {
String dirNombre = directorio.getName();
File archDestino = new File(dirDestino + dirNombre);
String rootFolder = "C:\";
archDestino.mkdir();
File [] porCopiar = directorio.listFiles();
directorio.toPath();
for(File file : porCopiar) {
if(file.isDirectory()) {
copiarDirectorio(file, archDestino.getAbsolutePath() + "/");
}
else {
copiarDirectorio(file, archDestino.getAbsolutePath() + "/");
}
}
}
}