Compare commits

...

5 commits
v0.1 ... master

Author SHA1 Message Date
Seelenoede
bf24ecdab0 - Fixed things GUIn the Engine class
- changed from Swing GUI to JavaFX GUI
- added release 0.3
2019-08-21 15:00:31 +02:00
Seelenoede
c14054b170 Separated GUI from Logic. No new features 2019-08-16 14:19:27 +02:00
Seelenoede
666db013ce Add new release 2019-08-06 15:31:55 +02:00
Seelenoede
cb712e1b22 Added small manual to readme 2019-08-06 15:29:51 +02:00
Seelenoede
935c7eda3e Added a first rudimentary file filter 2019-08-06 15:26:32 +02:00
8 changed files with 239 additions and 177 deletions

View file

@ -1,5 +1,8 @@
Extracts files from one or multiple folders and moves them to the parent folder. Extracts files from one or multiple folders and moves them to the parent folder.
How to use the extension filter:
Add file extensions into the text field and separate extensions with comma.
If you didn't write anything or whitespaces the program will extract all files.
TODOS: TODOS:
- improve GUI - improve GUI
- add file filter

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,56 @@
package eu.seelenoede.getyourfilesoutthere;
import java.io.File;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
public class Engine {
private SettingsFilter filter;
public Engine() {
filter = new SettingsFilter();
}
/**
* Extract files from the directories
*
* @author Seelenoede
*/
protected void extractFiles(File[] dirs) {
for(File dir:dirs) {
try {
String parentDir = dir.getCanonicalFile().getParent();
File[] files;
if(filter.extensions.size() == 0)
files = dir.listFiles();
else
files = dir.listFiles(filter);
for(File file:files) {
Path target = FileSystems.getDefault().getPath(parentDir + "\\" + file.getName());
Files.move(file.toPath(), target, StandardCopyOption.REPLACE_EXISTING);
}
}
catch (IOException e) {
e.printStackTrace();
}
}
}
protected void setExtensionSettings(String extensionString) {
if(extensionString.equals("")) {
return;
}
String[] extensions = extensionString.split(",");
for(String extension:extensions) {
filter.extensions.add(extension.trim());
}
}
}

View file

@ -0,0 +1,58 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>
<BorderPane fx:controller="eu.seelenoede.getyourfilesoutthere.Main" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.171">
<center>
<Label fx:id="lblDone" text="Done" visible="false" BorderPane.alignment="CENTER">
<BorderPane.margin>
<Insets bottom="5.0" />
</BorderPane.margin>
</Label>
</center>
<bottom>
<Button mnemonicParsing="false" onAction="#handleStartButtonAction" text="Start" BorderPane.alignment="CENTER" />
</bottom>
<top>
<GridPane BorderPane.alignment="CENTER">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" />
<ColumnConstraints hgrow="SOMETIMES" />
<ColumnConstraints hgrow="SOMETIMES" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<TextField fx:id="textField_dirs" editable="false" GridPane.columnIndex="1">
<GridPane.margin>
<Insets />
</GridPane.margin>
</TextField>
<Label text="Path: " />
<Button alignment="CENTER" contentDisplay="CENTER" mnemonicParsing="false" onAction="#handleBrowseButtonAction" text="Browse" GridPane.columnIndex="2">
<GridPane.margin>
<Insets left="5.0" right="5.0" />
</GridPane.margin>
</Button>
<Label text="Extensions: " GridPane.rowIndex="1" />
<TextField fx:id="textField_extensions" GridPane.columnIndex="1" GridPane.rowIndex="1" text=""/>
</children>
<BorderPane.margin>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
</BorderPane.margin>
</GridPane>
</top>
<padding>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
</padding>
</BorderPane>

View file

@ -0,0 +1,95 @@
package eu.seelenoede.getyourfilesoutthere;
import java.io.File;
import java.io.IOException;
import javax.swing.JFileChooser;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.stage.Stage;
public class Main extends Application {
private boolean alreadyRunning;
private File[] dirs;
private Engine engine;
@FXML Label lblDone;
@FXML TextField textField_dirs;
@FXML TextField textField_extensions;
@FXML
public void initialize() {
engine = new Engine();
alreadyRunning = false;
}
@Override
public void start(Stage primaryStage) throws IOException {
Parent root = FXMLLoader.load(getClass().getResource("GUI.fxml"));
Scene scene = new Scene(root);
primaryStage.setTitle("Get Your Files Out There");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
@FXML
private void handleBrowseButtonAction(ActionEvent event) {
selectDirs();
}
@FXML
private void handleStartButtonAction(ActionEvent event) {
Thread noBlock = new Thread() {
public void run() {
engine.setExtensionSettings(textField_extensions.getText());
resetElements();
engine.extractFiles(dirs);
alreadyRunning = false;
lblDone.setVisible(true);
}
};
if ((!alreadyRunning) & (dirs!=null)) {
noBlock.start();
alreadyRunning = true;
}
}
private void resetElements() {
lblDone.setVisible(false);
}
private void selectDirs() {
if(alreadyRunning){
return;
}
JFileChooser chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
chooser.setMultiSelectionEnabled(true);
int val = chooser.showOpenDialog(null);
if (val == JFileChooser.APPROVE_OPTION) {
dirs = chooser.getSelectedFiles();
String selectedDirs = "";
for (File dir:dirs)
{
selectedDirs = selectedDirs + "\"" + dir.getAbsolutePath() + "\"; ";
}
textField_dirs.setText(selectedDirs);
}
}
}

View file

@ -1,175 +0,0 @@
package eu.seelenoede.getyourfilesoutthere;
import java.io.File;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import javax.swing.JFrame;
import javax.swing.JTextField;
import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.SwingUtilities;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Color;
import javax.swing.JFileChooser;
public class MainForm {
private JFrame frmGetYourFiles;
private JTextField textField;
private JLabel lblPath;
private boolean alreadyRunning;
private JPanel panel_progress;
private JButton btnBrowse;
private File[] dirs;
private JLabel lblDone;
/**
* Launch the application.
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
MainForm window = new MainForm();
window.frmGetYourFiles.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public MainForm() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
alreadyRunning = false;
frmGetYourFiles = new JFrame("Get Your Files Out There");
frmGetYourFiles.setTitle("Get Your Files Out There");
frmGetYourFiles.getContentPane().setBackground(Color.LIGHT_GRAY);
frmGetYourFiles.setResizable(false);
frmGetYourFiles.setBackground(Color.WHITE);
frmGetYourFiles.setBounds(100, 100, 489, 150);
frmGetYourFiles.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frmGetYourFiles.setLocationRelativeTo(null);
frmGetYourFiles.getContentPane().setLayout(new BorderLayout(0, 0));
JPanel panel_path = new JPanel();
panel_path.setBackground(Color.WHITE);
frmGetYourFiles.getContentPane().add(panel_path, BorderLayout.NORTH);
lblPath = new JLabel("Path: ");
panel_path.add(lblPath);
textField = new JTextField();
textField.setEditable(false);
panel_path.add(textField);
textField.setColumns(30);
btnBrowse = new JButton("Browse");
btnBrowse.setBackground(Color.LIGHT_GRAY);
btnBrowse.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(alreadyRunning){
return;
}
JFileChooser chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
chooser.setMultiSelectionEnabled(true);
int val = chooser.showOpenDialog(null);
if (val == JFileChooser.APPROVE_OPTION) {
dirs = chooser.getSelectedFiles();
String selectedDirs = "";
for (File dir:dirs)
{
selectedDirs = selectedDirs + "\"" + dir.getAbsolutePath() + "\"; ";
}
textField.setText(selectedDirs);
}
}
});
panel_path.add(btnBrowse);
JButton btnStart = new JButton("Start");
btnStart.setSelected(true);
btnStart.setBackground(Color.LIGHT_GRAY);
frmGetYourFiles.getRootPane().setDefaultButton(btnStart);
btnStart.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Thread noBlock = new Thread() {
public void run() {
resetElements();
extractFiles();
}
};
if ((!alreadyRunning) & (dirs!=null)) {
noBlock.start();
alreadyRunning = true;
}
}
});
frmGetYourFiles.getContentPane().add(btnStart, BorderLayout.SOUTH);
panel_progress = new JPanel();
panel_progress.setBackground(Color.WHITE);
frmGetYourFiles.getContentPane().add(panel_progress, BorderLayout.CENTER);
lblDone = new JLabel("");
panel_progress.add(lblDone);
}
private void extractFiles() {
for(File dir:dirs) {
try {
String parentDir = dir.getCanonicalFile().getParent();
File[] files;
files = dir.listFiles();
for(File file:files) {
Path target = FileSystems.getDefault().getPath(parentDir + "\\" + file.getName());
Files.move(file.toPath(), target, StandardCopyOption.REPLACE_EXISTING);
}
}
catch (IOException e) {
e.printStackTrace();
}
}
lblDone.setText("Done");
alreadyRunning = false;
}
private void resetElements() {
//lblExtract.setText("");
//lblZip.setText("");
lblDone.setText("");
//progressBar_Extraction.setValue(0);
//progressBar_Zip.setValue(0);
}
}

View file

@ -0,0 +1,25 @@
package eu.seelenoede.getyourfilesoutthere;
import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
public class SettingsFilter implements FileFilter {
ArrayList<String> extensions;
SettingsFilter() {
extensions = new ArrayList<String>();
}
@Override
public boolean accept(File pathname) {
String filePath = pathname.getAbsolutePath();
String fileExtension = filePath.substring(filePath.lastIndexOf('.') + 1);
if(extensions.contains(fileExtension))
return true;
return false;
}
}