From 6b485283fdedbb4916729ed241772d05db47295b Mon Sep 17 00:00:00 2001 From: gast Date: Thu, 14 May 2026 10:43:56 +0300 Subject: [PATCH] First issue --- .gitignore | 8 +- .settings/org.eclipse.core.resources.prefs | 6 + .settings/org.eclipse.jdt.apt.core.prefs | 4 + .settings/org.eclipse.jdt.core.prefs | 10 ++ .settings/org.eclipse.m2e.core.prefs | 4 + .../org.springframework.ide.eclipse.prefs | 2 + compiled/FileMerger.jar | Bin 0 -> 3747 bytes src/FileMergerApp.java | 133 ++++++++++++++++++ 8 files changed, 166 insertions(+), 1 deletion(-) create mode 100644 .settings/org.eclipse.core.resources.prefs create mode 100644 .settings/org.eclipse.jdt.apt.core.prefs create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 .settings/org.eclipse.m2e.core.prefs create mode 100644 .settings/org.springframework.ide.eclipse.prefs create mode 100644 compiled/FileMerger.jar create mode 100644 src/FileMergerApp.java diff --git a/.gitignore b/.gitignore index 9154f4c..11b539d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,8 @@ -# ---> Java +# Java +bin/ +*.classpath +*.project + # Compiled class file *.class @@ -24,3 +28,5 @@ hs_err_pid* replay_pid* +# do NOT ignores +!FileMerger.jar diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..29abf99 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,6 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding//src/test/java=UTF-8 +encoding//src/test/resources=UTF-8 +encoding/=UTF-8 diff --git a/.settings/org.eclipse.jdt.apt.core.prefs b/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 0000000..dfa4f3a --- /dev/null +++ b/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations +org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..943cc39 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,10 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.methodParameters=generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=21 +org.eclipse.jdt.core.compiler.compliance=21 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.processAnnotations=enabled +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=21 diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/.settings/org.springframework.ide.eclipse.prefs b/.settings/org.springframework.ide.eclipse.prefs new file mode 100644 index 0000000..a12794d --- /dev/null +++ b/.settings/org.springframework.ide.eclipse.prefs @@ -0,0 +1,2 @@ +boot.validation.initialized=true +eclipse.preferences.version=1 diff --git a/compiled/FileMerger.jar b/compiled/FileMerger.jar new file mode 100644 index 0000000000000000000000000000000000000000..9656649660dd34a5da0b1e52fd7bd7f1b83770a9 GIT binary patch literal 3747 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 q|E9u!{_3!o)4u>C2=5I5 literal 0 HcmV?d00001 diff --git a/src/FileMergerApp.java b/src/FileMergerApp.java new file mode 100644 index 0000000..fd63297 --- /dev/null +++ b/src/FileMergerApp.java @@ -0,0 +1,133 @@ +import javax.swing.*; +import java.awt.*; +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class FileMergerApp extends JFrame { + + private static final long serialVersionUID = 6160781397779652462L; + private final JTextArea textArea; + private final List selectedFiles; + private File lastDirectory; + + public FileMergerApp() { + setTitle("Multi File Merger"); + setSize(600, 700); + setDefaultCloseOperation(EXIT_ON_CLOSE); + setLocationRelativeTo(null); + + selectedFiles = new ArrayList<>(); + textArea = new JTextArea(); + textArea.setEditable(false); + + JButton selectButton = new JButton("Select"); + JButton mergeButton = new JButton("Merge"); + + selectButton.addActionListener(e -> selectFiles()); + mergeButton.addActionListener(e -> mergeFiles()); + + JPanel buttonPanel = new JPanel(); + buttonPanel.add(selectButton); + buttonPanel.add(mergeButton); + + add(buttonPanel, BorderLayout.NORTH); + add(new JScrollPane(textArea), BorderLayout.CENTER); + } + + private void selectFiles() { + JFileChooser chooser = new JFileChooser(); + + if (lastDirectory != null) { + chooser.setCurrentDirectory(lastDirectory); + } + + chooser.setMultiSelectionEnabled(true); + chooser.setFileSelectionMode(JFileChooser.FILES_ONLY); + + int result = chooser.showOpenDialog(this); + if (result != JFileChooser.APPROVE_OPTION) { + return; + } + + File[] files = chooser.getSelectedFiles(); + if (files.length == 0) { + return; + } + + lastDirectory = chooser.getCurrentDirectory(); + + for (File file : files) { + selectedFiles.add(file); + textArea.append(file.getAbsolutePath()); + textArea.append(System.lineSeparator()); + } + } + + private void mergeFiles() { + if (selectedFiles.isEmpty()) { + JOptionPane.showMessageDialog( + this, + "No files selected.", + "Warning", + JOptionPane.WARNING_MESSAGE + ); + return; + } + + String timestamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); + File outputFile = new File( + System.getProperty("user.dir"), + "SingleFile_" + timestamp + ".txt" + ); + + try (BufferedWriter writer = Files.newBufferedWriter( + outputFile.toPath(), + StandardCharsets.UTF_8 + )) { + for (File file : selectedFiles) { + writer.write(file.getName()); + writer.newLine(); + + Files.lines(file.toPath(), StandardCharsets.UTF_8) + .forEach(line -> { + try { + writer.write(line); + writer.newLine(); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + }); + + writer.newLine(); + } + + JOptionPane.showMessageDialog( + this, + "Merged file created:\n" + outputFile.getAbsolutePath(), + "Success", + JOptionPane.INFORMATION_MESSAGE + ); + + // cleanup after merge + selectedFiles.clear(); + textArea.setText(""); + + } catch (IOException | UncheckedIOException ex) { + JOptionPane.showMessageDialog( + this, + "Error during merge:\n" + ex.getMessage(), + "Error", + JOptionPane.ERROR_MESSAGE + ); + } + } + + public static void main(String[] args) { + SwingUtilities.invokeLater(() -> new FileMergerApp().setVisible(true)); + } +}