From 113d43daea2ab92e9438c4eccb486900879f6dea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80?= Date: Wed, 20 Aug 2025 12:08:13 +0300 Subject: [PATCH 01/21] minka --- src/main/java/com/javarush/minka | 1 + 1 file changed, 1 insertion(+) create mode 100644 src/main/java/com/javarush/minka diff --git a/src/main/java/com/javarush/minka b/src/main/java/com/javarush/minka new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/main/java/com/javarush/minka @@ -0,0 +1 @@ + From a1c118abfedb07fa0a2d9fd82c6963516aa316c8 Mon Sep 17 00:00:00 2001 From: AlexanderMinka Date: Wed, 20 Aug 2025 14:40:24 +0300 Subject: [PATCH 02/21] =?UTF-8?q?=D0=A8=D0=B0=D0=B3=201:=20=D0=BE=D1=81?= =?UTF-8?q?=D0=B2=D0=B0=D0=B8=D0=B2=D0=B0=D1=8E=20Git.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/javarush/minka | 1 - .../com/javarush/minka/ConsoleRunner.java | 23 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) delete mode 100644 src/main/java/com/javarush/minka create mode 100644 src/main/java/com/javarush/minka/ConsoleRunner.java diff --git a/src/main/java/com/javarush/minka b/src/main/java/com/javarush/minka deleted file mode 100644 index 8b13789..0000000 --- a/src/main/java/com/javarush/minka +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/main/java/com/javarush/minka/ConsoleRunner.java b/src/main/java/com/javarush/minka/ConsoleRunner.java new file mode 100644 index 0000000..b1e5256 --- /dev/null +++ b/src/main/java/com/javarush/minka/ConsoleRunner.java @@ -0,0 +1,23 @@ +package com.javarush.minka; + +import com.javarush.khmelov.controller.MainController; +import com.javarush.khmelov.view.console.ConsoleApp; +import com.javarush.khmelov.view.console.Menu; + +import java.util.Scanner; + +public class ConsoleRunner { + + public static void main(String[] args) { + // Осваиваю Git + + //build console app + Scanner input = new Scanner(System.in); + Menu menu = new Menu(input); + MainController mainController = new MainController(); + ConsoleApp application = new ConsoleApp(mainController, menu); + //run console app + application.run(args); + } +} + From fc7155281edbf777cf5eb60c66985e7db4f5b6c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80?= Date: Wed, 20 Aug 2025 16:13:33 +0300 Subject: [PATCH 03/21] Update ConsoleRunner.java --- src/main/java/com/javarush/minka/ConsoleRunner.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/javarush/minka/ConsoleRunner.java b/src/main/java/com/javarush/minka/ConsoleRunner.java index b1e5256..b5b294a 100644 --- a/src/main/java/com/javarush/minka/ConsoleRunner.java +++ b/src/main/java/com/javarush/minka/ConsoleRunner.java @@ -9,6 +9,7 @@ public class ConsoleRunner { public static void main(String[] args) { + // 04:12 // Осваиваю Git //build console app From ae747a1d9dc6c9bc5870a7278597b9b67aae567e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80?= Date: Wed, 20 Aug 2025 16:13:33 +0300 Subject: [PATCH 04/21] Update ConsoleRunner.java --- .../java/com/javarush/minka/ConsoleRunner.java | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/javarush/minka/ConsoleRunner.java b/src/main/java/com/javarush/minka/ConsoleRunner.java index b5b294a..cd97b9f 100644 --- a/src/main/java/com/javarush/minka/ConsoleRunner.java +++ b/src/main/java/com/javarush/minka/ConsoleRunner.java @@ -1,24 +1,12 @@ package com.javarush.minka; -import com.javarush.khmelov.controller.MainController; -import com.javarush.khmelov.view.console.ConsoleApp; -import com.javarush.khmelov.view.console.Menu; - import java.util.Scanner; public class ConsoleRunner { public static void main(String[] args) { - // 04:12 - // Осваиваю Git - - //build console app Scanner input = new Scanner(System.in); - Menu menu = new Menu(input); - MainController mainController = new MainController(); - ConsoleApp application = new ConsoleApp(mainController, menu); - //run console app - application.run(args); - } -} + input.nextLine(); // Это чтобы предупреждение не высвечивалось. + } +} \ No newline at end of file From 01253bed5fcf1961cde7ab75426c64350162a423 Mon Sep 17 00:00:00 2001 From: AlexanderMNK Date: Mon, 25 Aug 2025 13:58:27 +0300 Subject: [PATCH 05/21] Update ConsoleRunner.java --- src/main/java/com/javarush/minka/ConsoleRunner.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/javarush/minka/ConsoleRunner.java b/src/main/java/com/javarush/minka/ConsoleRunner.java index cd97b9f..1a72dcc 100644 --- a/src/main/java/com/javarush/minka/ConsoleRunner.java +++ b/src/main/java/com/javarush/minka/ConsoleRunner.java @@ -8,5 +8,6 @@ public static void main(String[] args) { Scanner input = new Scanner(System.in); input.nextLine(); // Это чтобы предупреждение не высвечивалось. + } } \ No newline at end of file From b2148b633368359bbe709f8804ca8e65354504f9 Mon Sep 17 00:00:00 2001 From: AlexanderMNK Date: Mon, 25 Aug 2025 15:00:15 +0300 Subject: [PATCH 06/21] Update ConsoleRunner.java --- src/main/java/com/javarush/minka/ConsoleRunner.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/javarush/minka/ConsoleRunner.java b/src/main/java/com/javarush/minka/ConsoleRunner.java index 1a72dcc..536ee87 100644 --- a/src/main/java/com/javarush/minka/ConsoleRunner.java +++ b/src/main/java/com/javarush/minka/ConsoleRunner.java @@ -6,8 +6,7 @@ public class ConsoleRunner { public static void main(String[] args) { Scanner input = new Scanner(System.in); - + // ... input.nextLine(); // Это чтобы предупреждение не высвечивалось. - } } \ No newline at end of file From d16f5c36b22a3ec4ba93b70ed01adf199ccfc608 Mon Sep 17 00:00:00 2001 From: AlexanderMNK Date: Mon, 25 Aug 2025 21:04:52 +0300 Subject: [PATCH 07/21] Dleted directory "Ivanov" --- src/main/java/com/javarush/ivanov/ConsoleRunner.java | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 src/main/java/com/javarush/ivanov/ConsoleRunner.java diff --git a/src/main/java/com/javarush/ivanov/ConsoleRunner.java b/src/main/java/com/javarush/ivanov/ConsoleRunner.java deleted file mode 100644 index e40fff2..0000000 --- a/src/main/java/com/javarush/ivanov/ConsoleRunner.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.javarush.ivanov; - -public class ConsoleRunner { - public static void main(String[] args) { - // Create package with your lastname in com.javarush - // and add your solution like this - System.out.println("у вас будет такой же пакет, но со своим решением"); - } -} \ No newline at end of file From 8d40e13a5126921c548d4c00b11f66e8509c23f5 Mon Sep 17 00:00:00 2001 From: AlexanderMNK Date: Mon, 25 Aug 2025 21:14:25 +0300 Subject: [PATCH 08/21] Step one. Simple coding and decoding from main. --- src/main/java/com/javarush/minka/ConsoleRunner.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/javarush/minka/ConsoleRunner.java b/src/main/java/com/javarush/minka/ConsoleRunner.java index 536ee87..a61a038 100644 --- a/src/main/java/com/javarush/minka/ConsoleRunner.java +++ b/src/main/java/com/javarush/minka/ConsoleRunner.java @@ -1,12 +1,9 @@ package com.javarush.minka; -import java.util.Scanner; - public class ConsoleRunner { public static void main(String[] args) { - Scanner input = new Scanner(System.in); - // ... - input.nextLine(); // Это чтобы предупреждение не высвечивалось. + // Шаг 1: кодируем текст. + } } \ No newline at end of file From f6425191e0e8584966f4f2c13ae2ee2ef7195f00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80?= Date: Mon, 25 Aug 2025 21:18:36 +0300 Subject: [PATCH 09/21] Update ConsoleRunner.java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Создание строки в GitHub. --- src/main/java/com/javarush/minka/ConsoleRunner.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/javarush/minka/ConsoleRunner.java b/src/main/java/com/javarush/minka/ConsoleRunner.java index a61a038..c0e445d 100644 --- a/src/main/java/com/javarush/minka/ConsoleRunner.java +++ b/src/main/java/com/javarush/minka/ConsoleRunner.java @@ -4,6 +4,7 @@ public class ConsoleRunner { public static void main(String[] args) { // Шаг 1: кодируем текст. - + + // Эта строка создана в GitHub. } -} \ No newline at end of file +} From 7ea25d5cc699bf3ea28028269ca9b263cfab25d1 Mon Sep 17 00:00:00 2001 From: AlexanderMNK Date: Tue, 26 Aug 2025 10:49:45 +0300 Subject: [PATCH 10/21] Added a new class. --- src/main/java/com/javarush/minka/Cipher.java | 24 +++++++++++++++++++ .../com/javarush/minka/ConsoleRunner.java | 5 +++- 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/javarush/minka/Cipher.java diff --git a/src/main/java/com/javarush/minka/Cipher.java b/src/main/java/com/javarush/minka/Cipher.java new file mode 100644 index 0000000..be25427 --- /dev/null +++ b/src/main/java/com/javarush/minka/Cipher.java @@ -0,0 +1,24 @@ +package com.javarush.minka; + +import java.util.Arrays; + +public class Cipher { + + public char[] alphabet; + public Cipher(char[] alphabet) { + this.alphabet = alphabet; + } + + public void printToConsole() { + System.out.println(Arrays.toString(alphabet)); +// System.out.println(Arrays.toString(alphabet)); + } +// public String encrypt(String text, int shift) { +// // Логика шифрования +// return ""; +// } +// public String decrypt(String encryptedText, int shift) { +// // Логика расшифровки +// return ""; +// } +} \ No newline at end of file diff --git a/src/main/java/com/javarush/minka/ConsoleRunner.java b/src/main/java/com/javarush/minka/ConsoleRunner.java index c0e445d..f8a0fdb 100644 --- a/src/main/java/com/javarush/minka/ConsoleRunner.java +++ b/src/main/java/com/javarush/minka/ConsoleRunner.java @@ -6,5 +6,8 @@ public static void main(String[] args) { // Шаг 1: кодируем текст. // Эта строка создана в GitHub. + String ALPHABET = "тут будет наш алфавит"; + Cipher cipher = new Cipher(ALPHABET.toCharArray()); + cipher.printToConsole(); } -} +} \ No newline at end of file From 14c2940246a83d5620b3248fc6a97eacee1a2ec7 Mon Sep 17 00:00:00 2001 From: AlexanderMNK Date: Tue, 26 Aug 2025 10:50:34 +0300 Subject: [PATCH 11/21] Added a new class. --- src/main/java/com/javarush/minka/Cipher.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/javarush/minka/Cipher.java b/src/main/java/com/javarush/minka/Cipher.java index be25427..40e0704 100644 --- a/src/main/java/com/javarush/minka/Cipher.java +++ b/src/main/java/com/javarush/minka/Cipher.java @@ -11,7 +11,6 @@ public Cipher(char[] alphabet) { public void printToConsole() { System.out.println(Arrays.toString(alphabet)); -// System.out.println(Arrays.toString(alphabet)); } // public String encrypt(String text, int shift) { // // Логика шифрования From 07d22a717a585d09e37b492c29b86becca8cfd3c Mon Sep 17 00:00:00 2001 From: AlexanderMNK Date: Tue, 26 Aug 2025 10:51:20 +0300 Subject: [PATCH 12/21] Added a new class. --- src/main/java/com/javarush/minka/Cipher.java | 1 + src/main/java/com/javarush/minka/ConsoleRunner.java | 1 + 2 files changed, 2 insertions(+) diff --git a/src/main/java/com/javarush/minka/Cipher.java b/src/main/java/com/javarush/minka/Cipher.java index 40e0704..026f474 100644 --- a/src/main/java/com/javarush/minka/Cipher.java +++ b/src/main/java/com/javarush/minka/Cipher.java @@ -12,6 +12,7 @@ public Cipher(char[] alphabet) { public void printToConsole() { System.out.println(Arrays.toString(alphabet)); } + // public String encrypt(String text, int shift) { // // Логика шифрования // return ""; diff --git a/src/main/java/com/javarush/minka/ConsoleRunner.java b/src/main/java/com/javarush/minka/ConsoleRunner.java index f8a0fdb..bc8b4bc 100644 --- a/src/main/java/com/javarush/minka/ConsoleRunner.java +++ b/src/main/java/com/javarush/minka/ConsoleRunner.java @@ -9,5 +9,6 @@ public static void main(String[] args) { String ALPHABET = "тут будет наш алфавит"; Cipher cipher = new Cipher(ALPHABET.toCharArray()); cipher.printToConsole(); + } } \ No newline at end of file From cca58af904d10db58362eacf97817cc0ee0f675d Mon Sep 17 00:00:00 2001 From: AlexanderMNK Date: Tue, 26 Aug 2025 11:04:01 +0300 Subject: [PATCH 13/21] Added basic classes. --- src/main/java/com/javarush/minka/FileManager.java | 4 ++++ src/main/java/com/javarush/minka/Validator.java | 4 ++++ 2 files changed, 8 insertions(+) create mode 100644 src/main/java/com/javarush/minka/FileManager.java create mode 100644 src/main/java/com/javarush/minka/Validator.java diff --git a/src/main/java/com/javarush/minka/FileManager.java b/src/main/java/com/javarush/minka/FileManager.java new file mode 100644 index 0000000..b06c1a9 --- /dev/null +++ b/src/main/java/com/javarush/minka/FileManager.java @@ -0,0 +1,4 @@ +package com.javarush.minka; + +public class FileManager { +} diff --git a/src/main/java/com/javarush/minka/Validator.java b/src/main/java/com/javarush/minka/Validator.java new file mode 100644 index 0000000..a835cd5 --- /dev/null +++ b/src/main/java/com/javarush/minka/Validator.java @@ -0,0 +1,4 @@ +package com.javarush.minka; + +public class Validator { +} From 99d6f77327fb5552eb9c3347750e9d6c7cdd8de7 Mon Sep 17 00:00:00 2001 From: AlexanderMNK Date: Tue, 26 Aug 2025 11:04:47 +0300 Subject: [PATCH 14/21] Added basic classes. --- src/main/java/com/javarush/minka/ConsoleRunner.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/javarush/minka/ConsoleRunner.java b/src/main/java/com/javarush/minka/ConsoleRunner.java index bc8b4bc..de7371d 100644 --- a/src/main/java/com/javarush/minka/ConsoleRunner.java +++ b/src/main/java/com/javarush/minka/ConsoleRunner.java @@ -3,12 +3,10 @@ public class ConsoleRunner { public static void main(String[] args) { - // Шаг 1: кодируем текст. - - // Эта строка создана в GitHub. String ALPHABET = "тут будет наш алфавит"; Cipher cipher = new Cipher(ALPHABET.toCharArray()); cipher.printToConsole(); - + new FileManager(); + new Validator(); } } \ No newline at end of file From a1bc5e0732e392f377f376b2abfca4c66a285e42 Mon Sep 17 00:00:00 2001 From: AlexanderMNK Date: Tue, 26 Aug 2025 11:24:27 +0300 Subject: [PATCH 15/21] Changed Alphabet and ConsoleRunner. --- .../java/com/javarush/minka/Alphabet.java | 24 +++++++++++++++++++ .../com/javarush/minka/ConsoleRunner.java | 3 +-- 2 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/javarush/minka/Alphabet.java diff --git a/src/main/java/com/javarush/minka/Alphabet.java b/src/main/java/com/javarush/minka/Alphabet.java new file mode 100644 index 0000000..13eed60 --- /dev/null +++ b/src/main/java/com/javarush/minka/Alphabet.java @@ -0,0 +1,24 @@ +package com.javarush.minka; + +import java.util.HashMap; +import java.util.Map; + +public class Alphabet { + private Alphabet() { + } + +// private static final String rus = "ЙЦУКЕНГШЩЗХЪЭЖДЛОРПАВЫФЯЧСМИТЬБЮ"; +// private static final String symbols = "\n☮.,”’:-!? "; +// public static final char[] chars = (rus.toLowerCase() + symbols).toCharArray(); + public static final char[] chars = {'а', 'б', 'в', 'г', 'д', 'е', 'ж', 'з', + 'и','к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', + 'ъ', 'ы', 'ь', 'э', 'я', '.', ',', '«', '»', '"', '\'', ':', '!', '?', ' ', '\n'}; + + public final static Map index = new HashMap<>(); + + static { + for (int i = 0; i < chars.length; i++) { + index.put(chars[i], i); + } + } +} diff --git a/src/main/java/com/javarush/minka/ConsoleRunner.java b/src/main/java/com/javarush/minka/ConsoleRunner.java index de7371d..25bb999 100644 --- a/src/main/java/com/javarush/minka/ConsoleRunner.java +++ b/src/main/java/com/javarush/minka/ConsoleRunner.java @@ -3,8 +3,7 @@ public class ConsoleRunner { public static void main(String[] args) { - String ALPHABET = "тут будет наш алфавит"; - Cipher cipher = new Cipher(ALPHABET.toCharArray()); + Cipher cipher = new Cipher(Alphabet.chars); cipher.printToConsole(); new FileManager(); new Validator(); From cbb5f7b7bf62e1bfbdf273bf437383d830b91f3e Mon Sep 17 00:00:00 2001 From: AlexanderMNK Date: Wed, 27 Aug 2025 15:31:07 +0300 Subject: [PATCH 16/21] Starting from zero. --- src/main/java/com/javarush/minka/Alphabet.java | 3 --- .../java/com/javarush/minka/Application.java | 16 ++++++++++++++++ .../java/com/javarush/minka/ConsoleRunner.java | 18 ++++++++++++++---- src/main/java/com/javarush/minka/Messages.java | 13 +++++++++++++ 4 files changed, 43 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/javarush/minka/Application.java create mode 100644 src/main/java/com/javarush/minka/Messages.java diff --git a/src/main/java/com/javarush/minka/Alphabet.java b/src/main/java/com/javarush/minka/Alphabet.java index 13eed60..1bb94bf 100644 --- a/src/main/java/com/javarush/minka/Alphabet.java +++ b/src/main/java/com/javarush/minka/Alphabet.java @@ -7,9 +7,6 @@ public class Alphabet { private Alphabet() { } -// private static final String rus = "ЙЦУКЕНГШЩЗХЪЭЖДЛОРПАВЫФЯЧСМИТЬБЮ"; -// private static final String symbols = "\n☮.,”’:-!? "; -// public static final char[] chars = (rus.toLowerCase() + symbols).toCharArray(); public static final char[] chars = {'а', 'б', 'в', 'г', 'д', 'е', 'ж', 'з', 'и','к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'я', '.', ',', '«', '»', '"', '\'', ':', '!', '?', ' ', '\n'}; diff --git a/src/main/java/com/javarush/minka/Application.java b/src/main/java/com/javarush/minka/Application.java new file mode 100644 index 0000000..00ab1e9 --- /dev/null +++ b/src/main/java/com/javarush/minka/Application.java @@ -0,0 +1,16 @@ +package com.javarush.minka; + +public class Application implements Messages { + public Application() { + Application.InfoAboutProgram(); + } + + public static void InfoAboutProgram() { + System.out.println(INFO_ABOUT_PROGRAM); + } + + public void run(String[] args) { + if (args == null) + System.out.println(MESSAGE_SELECT_MODE); + } +} diff --git a/src/main/java/com/javarush/minka/ConsoleRunner.java b/src/main/java/com/javarush/minka/ConsoleRunner.java index 25bb999..f6e1a85 100644 --- a/src/main/java/com/javarush/minka/ConsoleRunner.java +++ b/src/main/java/com/javarush/minka/ConsoleRunner.java @@ -3,9 +3,19 @@ public class ConsoleRunner { public static void main(String[] args) { - Cipher cipher = new Cipher(Alphabet.chars); - cipher.printToConsole(); - new FileManager(); - new Validator(); + // Это мой первый проект, поэтому приношу свои извинения + // всякому, кто увидит этот код(юмор, если что). + // Обилие комментариев обосновано тем, что мне так легче + // концентрироваться на конкретной цели. + +// Scanner scanner = new Scanner(System.in); +// scanner.nextLine(); + char[] alpha = Alphabet.chars; + System.out.println(alpha); + + // Создание меню. + + Application application = new Application(); + application.run(null); } } \ No newline at end of file diff --git a/src/main/java/com/javarush/minka/Messages.java b/src/main/java/com/javarush/minka/Messages.java new file mode 100644 index 0000000..5dad30b --- /dev/null +++ b/src/main/java/com/javarush/minka/Messages.java @@ -0,0 +1,13 @@ +package com.javarush.minka; + +public interface Messages { + String INFO_ABOUT_PROGRAM = "Программа шифрования и дешифрования!"; + + String HORIZON_SEPARATE = "-".repeat(25); + String MESSAGE_SELECT_MODE = HORIZON_SEPARATE + + "\u001b[32m" + "\nPlease select mode:\n" + "\u001b[32m" + """ + 1. Encrypt + 2. Decrypt + 3. Exit + """ + "\u001b[0m" + HORIZON_SEPARATE; +} \ No newline at end of file From 1f0f15037add6bcb07f15b2154e79c91f2d5e51d Mon Sep 17 00:00:00 2001 From: AlexanderMNK Date: Sun, 31 Aug 2025 14:49:26 +0300 Subject: [PATCH 17/21] The project has been reworked for the second time. --- .../java/com/javarush/minka/Alphabet.java | 18 ++++-- .../java/com/javarush/minka/Application.java | 16 ------ src/main/java/com/javarush/minka/Cipher.java | 24 -------- .../com/javarush/minka/ConsoleRunner.java | 24 +++----- .../java/com/javarush/minka/CryptoAction.java | 25 ++++++++ .../java/com/javarush/minka/CryptoApp.java | 50 ++++++++++++++++ .../com/javarush/minka/CryptoProcessor.java | 15 +++++ src/main/java/com/javarush/minka/Decrypt.java | 12 ++++ .../minka/DefaultFilePathBuilder.java | 9 +++ src/main/java/com/javarush/minka/Encrypt.java | 12 ++++ .../java/com/javarush/minka/FileManager.java | 4 -- .../com/javarush/minka/InputParamsReader.java | 45 +++++++++++++++ src/main/java/com/javarush/minka/Menu.java | 20 +++++++ .../java/com/javarush/minka/Messages.java | 13 ----- .../java/com/javarush/minka/Validator.java | 4 -- src/main/java/com/javarush/minka/text.txt | 57 +++++++++++++++++++ 16 files changed, 266 insertions(+), 82 deletions(-) delete mode 100644 src/main/java/com/javarush/minka/Application.java delete mode 100644 src/main/java/com/javarush/minka/Cipher.java create mode 100644 src/main/java/com/javarush/minka/CryptoAction.java create mode 100644 src/main/java/com/javarush/minka/CryptoApp.java create mode 100644 src/main/java/com/javarush/minka/CryptoProcessor.java create mode 100644 src/main/java/com/javarush/minka/Decrypt.java create mode 100644 src/main/java/com/javarush/minka/DefaultFilePathBuilder.java create mode 100644 src/main/java/com/javarush/minka/Encrypt.java delete mode 100644 src/main/java/com/javarush/minka/FileManager.java create mode 100644 src/main/java/com/javarush/minka/InputParamsReader.java create mode 100644 src/main/java/com/javarush/minka/Menu.java delete mode 100644 src/main/java/com/javarush/minka/Messages.java delete mode 100644 src/main/java/com/javarush/minka/Validator.java create mode 100644 src/main/java/com/javarush/minka/text.txt diff --git a/src/main/java/com/javarush/minka/Alphabet.java b/src/main/java/com/javarush/minka/Alphabet.java index 1bb94bf..7ba835f 100644 --- a/src/main/java/com/javarush/minka/Alphabet.java +++ b/src/main/java/com/javarush/minka/Alphabet.java @@ -7,15 +7,21 @@ public class Alphabet { private Alphabet() { } - public static final char[] chars = {'а', 'б', 'в', 'г', 'д', 'е', 'ж', 'з', - 'и','к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', - 'ъ', 'ы', 'ь', 'э', 'я', '.', ',', '«', '»', '"', '\'', ':', '!', '?', ' ', '\n'}; + private static final String en = "QWERTYUIOPASDFGHJKLZXCVBNM"; + private static final String rus = "ЙЦУКЕНГШЩЗХЪЭЖДЛОРПАВЫФЯЧСМИТЬБЮ"; + private static final String numbers = "1234567890"; + private static final String symbols = "\n.,”’\":;-!? ()<>"; - public final static Map index = new HashMap<>(); + public static final char[] chars = (rus + rus.toLowerCase() + + en + en.toLowerCase() + + numbers + symbols + ).toCharArray(); + + public static final Map indexLetter = new HashMap<>(); static { for (int i = 0; i < chars.length; i++) { - index.put(chars[i], i); + indexLetter.put(chars[i], i); } } -} +} \ No newline at end of file diff --git a/src/main/java/com/javarush/minka/Application.java b/src/main/java/com/javarush/minka/Application.java deleted file mode 100644 index 00ab1e9..0000000 --- a/src/main/java/com/javarush/minka/Application.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.javarush.minka; - -public class Application implements Messages { - public Application() { - Application.InfoAboutProgram(); - } - - public static void InfoAboutProgram() { - System.out.println(INFO_ABOUT_PROGRAM); - } - - public void run(String[] args) { - if (args == null) - System.out.println(MESSAGE_SELECT_MODE); - } -} diff --git a/src/main/java/com/javarush/minka/Cipher.java b/src/main/java/com/javarush/minka/Cipher.java deleted file mode 100644 index 026f474..0000000 --- a/src/main/java/com/javarush/minka/Cipher.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.javarush.minka; - -import java.util.Arrays; - -public class Cipher { - - public char[] alphabet; - public Cipher(char[] alphabet) { - this.alphabet = alphabet; - } - - public void printToConsole() { - System.out.println(Arrays.toString(alphabet)); - } - -// public String encrypt(String text, int shift) { -// // Логика шифрования -// return ""; -// } -// public String decrypt(String encryptedText, int shift) { -// // Логика расшифровки -// return ""; -// } -} \ No newline at end of file diff --git a/src/main/java/com/javarush/minka/ConsoleRunner.java b/src/main/java/com/javarush/minka/ConsoleRunner.java index f6e1a85..008d6c8 100644 --- a/src/main/java/com/javarush/minka/ConsoleRunner.java +++ b/src/main/java/com/javarush/minka/ConsoleRunner.java @@ -1,21 +1,15 @@ package com.javarush.minka; -public class ConsoleRunner { +import java.util.Scanner; +public class ConsoleRunner { public static void main(String[] args) { - // Это мой первый проект, поэтому приношу свои извинения - // всякому, кто увидит этот код(юмор, если что). - // Обилие комментариев обосновано тем, что мне так легче - // концентрироваться на конкретной цели. - -// Scanner scanner = new Scanner(System.in); -// scanner.nextLine(); - char[] alpha = Alphabet.chars; - System.out.println(alpha); - - // Создание меню. - - Application application = new Application(); - application.run(null); + Scanner scanner = new Scanner(System.in); + Menu menu = new Menu(); + DefaultFilePathBuilder filePathBuilder = new DefaultFilePathBuilder(); + InputParamsReader inputParamsReader = new InputParamsReader(scanner, filePathBuilder); + CryptoProcessor cryptoProcessor = new CryptoProcessor(); + CryptoApp cryptoApp = new CryptoApp(cryptoProcessor, menu, inputParamsReader, scanner); + cryptoApp.run(); } } \ No newline at end of file diff --git a/src/main/java/com/javarush/minka/CryptoAction.java b/src/main/java/com/javarush/minka/CryptoAction.java new file mode 100644 index 0000000..44c5a59 --- /dev/null +++ b/src/main/java/com/javarush/minka/CryptoAction.java @@ -0,0 +1,25 @@ +package com.javarush.minka; + +import java.io.*; + +public abstract class CryptoAction { + public void process(String inputFilePath, String outputFilePath, int key) throws IOException { + try ( + BufferedReader reader = new BufferedReader(new FileReader(inputFilePath)); + BufferedWriter writer = new BufferedWriter(new FileWriter(outputFilePath)) + ) { + int symbol; + while ((symbol = reader.read()) != -1) { + char c = (char) symbol; + char changed = transform(c, key); + writer.write(changed); + } + } + } + + protected abstract char transform(char c, int key); + + protected Integer getIndex(char c) { + return Alphabet.indexLetter.get(c); + } +} diff --git a/src/main/java/com/javarush/minka/CryptoApp.java b/src/main/java/com/javarush/minka/CryptoApp.java new file mode 100644 index 0000000..d80eb01 --- /dev/null +++ b/src/main/java/com/javarush/minka/CryptoApp.java @@ -0,0 +1,50 @@ +package com.javarush.minka; + +import java.util.Scanner; + +public class CryptoApp { + private final CryptoProcessor cryptoProcessor; + private final Menu menu; + private final InputParamsReader inputParamsReader; + private final Scanner scanner; + + public CryptoApp(CryptoProcessor cryptoProcessor, Menu menu, InputParamsReader inputParamsReader, Scanner scanner) { + this.cryptoProcessor = cryptoProcessor; + this.menu = menu; + this.inputParamsReader = inputParamsReader; + this.scanner = scanner; + } + + public void run() { + while (true) { + int choice = menu.showMainMenu(scanner); + if (choice == 1) { + String inputFile = inputParamsReader.readInputFile(); + String outputFile = inputParamsReader.readOutputFile(); + int key = inputParamsReader.readKey(); + try { + cryptoProcessor.encrypt(inputFile, outputFile, key); + System.out.println("Шифрование завершено! Результат: " + outputFile); + } catch (Exception e) { + System.out.println("Ошибка: " + e.getMessage()); + } + } else if (choice == 2) { + String inputFile = inputParamsReader.readInputFile(); + String outputFile = inputParamsReader.readOutputFile(); + int key = inputParamsReader.readKey(); + try { + cryptoProcessor.decrypt(inputFile, outputFile, key); + System.out.println("Дешифрование завершено! Результат: " + outputFile); + } catch (Exception e) { + System.out.println("Ошибка: " + e.getMessage()); + } + } else if (choice == 3) { + System.out.println("Выход."); + break; + } else { + System.out.println("Ошибка: некорректный выбор."); + } + System.out.println(); + } + } +} diff --git a/src/main/java/com/javarush/minka/CryptoProcessor.java b/src/main/java/com/javarush/minka/CryptoProcessor.java new file mode 100644 index 0000000..9940f5d --- /dev/null +++ b/src/main/java/com/javarush/minka/CryptoProcessor.java @@ -0,0 +1,15 @@ +package com.javarush.minka; + +import java.io.IOException; + +public class CryptoProcessor { + public void encrypt(String inputFile, String outputFile, int key) throws IOException { + CryptoAction action = new Encrypt(); + action.process(inputFile, outputFile, key); + } + + public void decrypt(String inputFile, String outputFile, int key) throws IOException { + CryptoAction action = new Decrypt(); + action.process(inputFile, outputFile, key); + } +} diff --git a/src/main/java/com/javarush/minka/Decrypt.java b/src/main/java/com/javarush/minka/Decrypt.java new file mode 100644 index 0000000..a547ee8 --- /dev/null +++ b/src/main/java/com/javarush/minka/Decrypt.java @@ -0,0 +1,12 @@ +package com.javarush.minka; + +public class Decrypt extends CryptoAction { + @Override + protected char transform(char c, int key) { + Integer index = getIndex(c); + if (index == null) return c; + int newIndex = (index - key) % Alphabet.chars.length; + if (newIndex < 0) newIndex += Alphabet.chars.length; + return Alphabet.chars[newIndex]; + } +} diff --git a/src/main/java/com/javarush/minka/DefaultFilePathBuilder.java b/src/main/java/com/javarush/minka/DefaultFilePathBuilder.java new file mode 100644 index 0000000..72fdab5 --- /dev/null +++ b/src/main/java/com/javarush/minka/DefaultFilePathBuilder.java @@ -0,0 +1,9 @@ +package com.javarush.minka; + +import java.io.File; + +public class DefaultFilePathBuilder { + public String buildAbsolutePath(String fileName) { + return new File(fileName).getAbsolutePath(); + } +} diff --git a/src/main/java/com/javarush/minka/Encrypt.java b/src/main/java/com/javarush/minka/Encrypt.java new file mode 100644 index 0000000..e7358ae --- /dev/null +++ b/src/main/java/com/javarush/minka/Encrypt.java @@ -0,0 +1,12 @@ +package com.javarush.minka; + +public class Encrypt extends CryptoAction { + @Override + protected char transform(char c, int key) { + Integer index = getIndex(c); + if (index == null) return c; + int newIndex = (index + key) % Alphabet.chars.length; + if (newIndex < 0) newIndex += Alphabet.chars.length; + return Alphabet.chars[newIndex]; + } +} diff --git a/src/main/java/com/javarush/minka/FileManager.java b/src/main/java/com/javarush/minka/FileManager.java deleted file mode 100644 index b06c1a9..0000000 --- a/src/main/java/com/javarush/minka/FileManager.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.javarush.minka; - -public class FileManager { -} diff --git a/src/main/java/com/javarush/minka/InputParamsReader.java b/src/main/java/com/javarush/minka/InputParamsReader.java new file mode 100644 index 0000000..9c1f820 --- /dev/null +++ b/src/main/java/com/javarush/minka/InputParamsReader.java @@ -0,0 +1,45 @@ +package com.javarush.minka; + +import java.util.Scanner; + +public class InputParamsReader { + private final Scanner scanner; + private final DefaultFilePathBuilder filePathBuilder; + + public InputParamsReader(Scanner scanner, DefaultFilePathBuilder filePathBuilder) { + this.scanner = scanner; + this.filePathBuilder = filePathBuilder; + } + + public String readInputFile() { + System.out.print("Использовать input.txt по умолчанию? (y/n): "); + String useDefault = scanner.nextLine(); + if (useDefault.equalsIgnoreCase("y")) { + return filePathBuilder.buildAbsolutePath("input.txt"); + } + System.out.print("Введите абсолютный путь к входному файлу: "); + return scanner.nextLine(); + } + + public String readOutputFile() { + System.out.print("Использовать output.txt по умолчанию? (y/n): "); + String useDefault = scanner.nextLine(); + if (useDefault.equalsIgnoreCase("y")) { + return filePathBuilder.buildAbsolutePath("output.txt"); + } + System.out.print("Введите абсолютный путь к выходному файлу: "); + return scanner.nextLine(); + } + + public int readKey() { + System.out.print("Введите числовой ключ: "); + while (true) { + String input = scanner.nextLine(); + try { + return Integer.parseInt(input); + } catch (Exception e) { + System.out.print("Некорректный ввод. Попробуйте еще раз: "); + } + } + } +} diff --git a/src/main/java/com/javarush/minka/Menu.java b/src/main/java/com/javarush/minka/Menu.java new file mode 100644 index 0000000..784d402 --- /dev/null +++ b/src/main/java/com/javarush/minka/Menu.java @@ -0,0 +1,20 @@ +package com.javarush.minka; + +import java.util.Scanner; + +public class Menu { + public int showMainMenu(Scanner scanner) { + System.out.println("-".repeat(70) + + "\u001b[32m" + "\nПрограмма шифрования и дешифрования файлов на основании шифра Цезаря."); + System.out.println("\t1. Шифрование"); + System.out.println("\t2. Дешифрование"); + System.out.println("\t3. Выход"); + System.out.print("Выберите действие: " + "\u001b[0m\n" + "-".repeat(70) + "\n"); + String input = scanner.nextLine(); + try { + return Integer.parseInt(input); + } catch (Exception e) { + return -1; + } + } +} \ No newline at end of file diff --git a/src/main/java/com/javarush/minka/Messages.java b/src/main/java/com/javarush/minka/Messages.java deleted file mode 100644 index 5dad30b..0000000 --- a/src/main/java/com/javarush/minka/Messages.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.javarush.minka; - -public interface Messages { - String INFO_ABOUT_PROGRAM = "Программа шифрования и дешифрования!"; - - String HORIZON_SEPARATE = "-".repeat(25); - String MESSAGE_SELECT_MODE = HORIZON_SEPARATE + - "\u001b[32m" + "\nPlease select mode:\n" + "\u001b[32m" + """ - 1. Encrypt - 2. Decrypt - 3. Exit - """ + "\u001b[0m" + HORIZON_SEPARATE; -} \ No newline at end of file diff --git a/src/main/java/com/javarush/minka/Validator.java b/src/main/java/com/javarush/minka/Validator.java deleted file mode 100644 index a835cd5..0000000 --- a/src/main/java/com/javarush/minka/Validator.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.javarush.minka; - -public class Validator { -} diff --git a/src/main/java/com/javarush/minka/text.txt b/src/main/java/com/javarush/minka/text.txt new file mode 100644 index 0000000..8420794 --- /dev/null +++ b/src/main/java/com/javarush/minka/text.txt @@ -0,0 +1,57 @@ +ЧАСТЬ ПЕРВАЯ + +I + + + -- Ну что, князь, Генуя и Лукка стали не больше как поместья, поместья фамилии Буонапарте. Нет, я вам вперед говорю, если вы мне не скажете, что у нас война, если вы позволите себе защищать все гадости, все ужасы этого антихриста (право, я верю, что он антихрист), -- я вас больше не знаю, вы уже не друг мой, вы уже не мой верный раб, как вы говорите. Ну, здравствуйте, здравствуйте. Я вижу, что я вас пугаю, садитесь и рассказывайте. + Так говорила в июле 1805 года известная Анна Павловна Шерер, фрейлина и приближенная императрицы Марии Федоровны, встречая важного и чиновного князя Василия, первым приехавшего на ее вечер. Анна Павловна кашляла несколько дней, у нее был грипп, как она говорила (грипп был тогда новое слово, употреблявшееся только редкими), а потому она не дежурила и не выходила из дому. В записочках, разосланных утром с красным лакеем, было написано без различия во всех: + "Если у вас, граф (или князь), нет в виду ничего лучшего и если перспектива вечера у бедной больной не слишком вас пугает, то я буду очень рада видеть вас нынче у себя между 7 и 10 часами. + Аннa Шерер". + -- О, какое жестокое нападение! -- отвечал, нисколько не смутясь такой встречей и слабо улыбаясь, вошедший князь с светлым выражением хитрого лица, в придворном шитом мундире, чулках, башмаках и звездах. + Он говорил на том изысканном французском языке, на котором не только говорили, но и думали наши деды, и с теми тихими покровительственными интонациями, которые свойственны состарившемуся в свете и при дворе значительному человеку. Он подошел к Анне Павловне, поцеловал ее руку, подставив ей свою надушенную и сияющую белизной даже между седыми волосами лысину, и покойно уселся на диване. + -- Прежде всего скажите, как ваше здоровье, милый друг? Успокойте друга, -- сказал он, не изменяя голоса, и тоном, в котором из-за приличия и участия просвечивало равнодушие и даже насмешка. + -- Как вы хотите, чтоб я была здорова, когда нравственно страдаешь? Разве можно оставаться спокойной в наше время, когда есть у человека чувство, -- сказала Анна Павловна. -- Вы весь вечер у меня, надеюсь? + -- А праздник английского посланника? Ныне среда. Мне надо показаться там, -- сказал князь. -- Дочь заедет за мной и повезет меня. + -- Я думала, что нынешний праздник отменен. Признаюсь, все эти праздники и фейерверки становятся несносны. + -- Ежели бы знали, что вы этого хотите, праздник бы отменили, -- сказал князь, по привычке, как заведенные часы, говоря вещи, которым он и не хотел, чтобы верили. + -- Не мучьте меня. Ну, что же решили по случаю депеши Новосильцева? Вы все знаете. + -- Как вам сказать? -- сказал князь холодным, скучающим тоном. -- Что решили? Решили, что Буонапарте сжег свои корабли, и мы тоже, кажется, готовы сжечь наши. + Князь Василий, говорил ли он умные или глупые, одушевленные или равнодушные слова, говорил их таким тоном, как будто он повторял их в тысячный раз, как актер роль старой пьесы, как будто слова выходили не из его соображения и как будто говорил он их не умом, не сердцем, а по памяти, одними губами. + Анна Павловна Шерер, напротив, несмотря на свои сорок лет, была преисполнена оживления и порывов, которые она долгим опытом едва приучила себя сдерживать в рамках придворной обдуманности, приличия и сдержанности. Каждую минуту она, видимо, готова была сказать что-нибудь лишнее, но, хотя она и на волосок была от того, это лишнее не прорывалось. Она была нехороша, но, видимо, сознаваемые ею самою восторженность ее взгляда и оживление улыбки, выражавших увлечение идеальными интересами, придавали ей то, что называлось интересностью. По словам и выражению князя Василия видно было, что в том кругу, где они оба обращались, давно установилось всеми признанное мнение об Анне Павловне как о милой и доброй энтузиастке и патриотке, которая берется немножко не за свое дело и часто вдается в крайность, но мила искренностью и пылкостью своих чувств. Быть энтузиасткой сделалось ее общественным положением, и иногда, когда ей даже того не хотелось, она, чтобы не обмануть ожиданий людей, знавших ее, делалась энтузиасткой. Сдержанная улыбка, игравшая постоянно на лице Анны Павловны, хотя и не шла к ее отжившим чертам, выражала, как у избалованных детей, постоянное сознание своего милого недостатка, от которого она не хочет, не может и не находит нужным исправляться. + Содержание депеши от Новосильцева, поехавшего в Париж для переговоров о мире, было следующее. + Приехав в Берлин, Новосильцев узнал, что Буонапарте издал декрет о присоединении Генуэзской республики к Французской империи в то самое время, как он изъявлял желание мириться с Англией при посредничестве России. Новосильцев, остановившись в Берлине и предполагая, что такое насилие Буонапарте может изменить намерение императора Александра, спрашивал разрешения его величества, ехать ли в Париж или возвратиться. Ответ Новосильцеву был уже составлен и должен быть отослан завтра. Завладение Генуей был желанный предлог для объявления войны, к которой мнение придворного общества было еще более готово, чем войско. В ответе было сказано: "Мы не хотим вести переговоров с человеком, который, изъявляя желание мириться, продолжает свои вторжения". + Это все было самою свежею новостью дня. Князь, видимо, знал все эти подробности из верных источников и шутливо передал их фрейлине. + -- Ну, к чему повели нас эти переговоры? -- сказала Анна Павловна по-французски, как происходил и весь разговор. -- Ну, к чему все эти переговоры? Не переговоры, а смерть за смерть мученика нужна злодею, -- сказала она, раздувая ноздри, поворачиваясь на диване и вслед за тем улыбаясь. + -- Как вы кровожадны, дорогая! В политике не все делается как в гостиной. Существуют предосторожности, -- сказал князь Василий с своею грустной улыбкой, которая была неестественна, но, повторяясь уж тридцать лет, так обжилась на старом лице князя, что казалась вместе и неестественною и привычною. -- Есть письма от ваших? -- прибавил он, видимо, считая фрейлину недостойною серьезного политического разговора и стараясь перевести его на другой предмет. + -- Но к чему повели нас эти предосторожности, -- продолжала спрашивать Анна Павловна, не поддаваясь ему. + -- А хоть бы к тому, чтоб узнать мнение Австрии, которую вы так любите, -- сказал князь Василий, видимо поддразнивая Анну Павловну и не желая выпускать разговор из шуточного тона. + Но Анна Павловна разгорячилась. + -- Ах, не говорите мне про Австрию! Я ничего не понимаю, может быть, но Австрия никогда не хотела и не хочет войны. Она предает нас. Россия одна должна быть спасительницею Европы. Наш благодетель знает свое высокое призвание и будет верен ему. Вот одно, во что я верю. Нашему доброму и чудному государю предстоит величайшая роль в мире, и он так добродетелен и хорош, что Бог не оставит его, и он исполнит свое призвание задавить гидру революции, которая теперь еще ужаснее в лице этого убийцы и злодея. Мы одни должны искупить кровь праведника. На кого нам надеяться, я вас спрашиваю? Англия с своим коммерческим духом не поймет и не может понять всю высоту души императора Александра. Она отказалась очистить Мальту. Она хочет видеть, ищет заднюю мысль наших действий. Что они сказали Новосильцеву? Ничего. Они не поняли, они не могут понять самоотвержения нашего императора, который ничего не хочет для себя и все хочет для блага мира. И что они обещали? Ничего. И что обещали, и того не будет. Пруссия уже объявила, что Буонапарте непобедим и что вся Европа ничего не может против него... И я не верю ни в одном слове ни Гарденбергу, ни Гаугвицу. Этот пресловутый нейтралитет Пруссии -- только западня. Я верю в одного Бога и в высокую судьбу нашего милого императора. Он спасет Европу!.. + Она вдруг остановилась с улыбкой насмешки над своею горячностью. + -- Я думаю, -- сказал князь, улыбаясь, -- что, ежели бы вас послали вместо нашего милого Винценгероде, вы бы взяли приступом согласие прусского короля. Вы так красноречивы. Вы дадите мне чаю? + -- Сейчас. Кстати, -- прибавила она, опять успокаиваясь, -- нынче у меня будет очень интересный человек, виконт де Мортемар. Он в родстве с Монморанси через Роганов, одна из лучших фамилий Франции. Это один из хороших эмигрантов, из настоящих. Он очень хорошо вел себя и все потерял. Он был при герцоге Энгиенском, при несчастном святом мученике во время его пребывания в Этенгейме. Говорят, он очень мил. Ваш обворожительный сын Ипполит обещал мне привезти его. Все наши дамы без ума от не?- + го, -- прибавила она с улыбкой презрения, как будто жалела о бедных дамах, не умевших выдумать ничего лучше, как влюбляться в виконта де Мортемара. + -- Кроме вас, разумеется, -- сказал князь все своим тоном посмеивания. -- Я его видал, этого виконта, в свете, -- прибавил он, видимо, мало заинтересованный надеждой видеть Мортемара. -- Скажите, -- сказал он, как будто только что вспомнив что-то, и особенно небрежно, тогда как то, о чем он спрашивал, было главною целью его посещения, -- правда, что императрица-мать желает назначения барона Функе первым секретарем в Вену? Этот барон, кажется, ничтожная личность. + Князь Василий желал определить сына на это место, которое через императрицу Марию Федоровну старались доставить барону. + Анна Павловна почти закрыла глаза в знак того, что ни она, ни кто другой не могут судить про то, что угодно или нравится императрице. + -- Барон Функе был рекомендован императрице-матери ее сестрою, -- только сказала она совсем особенным грустным сухим тоном. В то время как Анна Павловна назвала императрицу, лицо ее вдруг представило глубокое и искреннее выражение преданности и уважения, соединенное с грустью, что с ней бывало каждый раз, как она в разговоре упоминала о своей высокой покровительнице. Она сказала, что ее величество изволила оказать барону Функе много уважения, и опять взгляд ее подернулся грустью. + Князь равнодушно замолк. Анна Павловна, с свойственною ей придворной и женской ловкостью и быстротою такта, захотела и щелкануть князя за то, что он дерзнул так отозваться о лице, рекомендованном императрице, и в то же время утешить его. + -- Кстати, о вашей семье, -- сказала она, -- знаете ли вы, что ваша дочь составляет наслаждение всего общества. Ее находят прекрасною, как день. Государыня очень часто спрашивает про нее: "Что делает прекрасная Елена?" + Князь наклонился в знак уважения и признательности. + -- Я часто думаю, -- продолжала Анна Павловна после минутного молчания, придвигаясь к князю и ласково улыбаясь ему, как будто выказывая этим, что политические и светские разговоры кончены и теперь начинается задушевный, -- я часто думаю, как иногда несправедливо распределяется счастие жизни. За что вам дала судьба таких двух славных детей (исключая Анатоля, вашего меньшого, я его не люблю, -- вставила она безапелляционно, приподняв брови), таких прелестных детей? А вы, право, менее всех цените их и потому их не ст\ите. + И она улыбнулась своей восторженною улыбкой. + -- Чего вы хотите? Лафатер сказал бы, что у меня нет шишки родительской любви, -- сказал князь вяло. + -- Перестаньте шутить. Я хотела серьезно поговорить с вами. Знаете, я недовольна вашим меньшим сыном. Я его совсем не знаю, но, кажется, он поставил задачей сделать себе скандальную репутацию. Между нами будь сказано (лицо ее приняло грустное выражение), о нем говорили у ее величества, и жалеют вас... + Князь не отвечал, но она, молча, значительно глядя на него, ждала ответа. Князь Василий поморщился. + -- Что вы хотите, чтоб я делал? -- сказал он наконец. -- Вы знаете, я сделал для их воспитания все, что может отец, и оба вышли дураки. Ипполит, по крайней мере, покойный дурак, а Анатоль -- беспокойный. Вот одно различие, -- сказал он, улыбаясь более неестественно и одушевленно, чем обыкновенно, и при этом особенно резко выказывая в сложившихся около его рта морщинах что-то такое грубое и неприятное, что Анне Павловне пришло на мысль: не очень, должно быть, приятно быть сыном или дочерью такого отца. + -- И зачем родятся дети у таких людей, как вы? Ежели бы вы не были отец, я бы ни в чем не могла упрекнуть вас, -- сказала Анна Павловна, задумчиво поднимая глаза. + -- Я ваш верный раб, и вам одной могу признаться. Мои дети -- обуза моего существования. Это мой крест. Я так себе объясняю. Чего вы хотите? -- Он помолчал, выражая жестом свою покорность жестокой судьбе. -- Да, ежели бы можно было по произволу иметь и не иметь их... Я уверен, что в наш век будет сделано это изобретение. + Анне Павловне не понравилась мысль о таком изобретении. + -- Вы никогда не думали о том, чтобы женить вашего блудного сына Анатоля? Говорят, что старые девицы имеют манию женить. + Я еще не чувствую за собой этой слабости, но у меня есть одна маленькая особа, которая очень несчастлива с отцом, наша родственница, княжна Болконская. + Князь Василий не отвечал, хотя со свойственной светским людям быстротой соображенья и памятью движением головы показал, что он принял к соображенью это сведение. + -- Нет, вы знаете ли, что этот Анатоль мне стоит 40 000 в год, -- сказал он, видимо, не в силах удерживать печальный ход своих мыслей. Он помолчал. -- Что будет через пять лет, ежели это пойдет так? Вот выгода быть отцом. Она богата, ваша княжна? + -- Отец очень богат и скуп. Он живет в деревне. Знаете, этот известный князь Болконский, отставленный еще при покойном императоре и прозванный Прусским королем. Он очень умный человек, но со странностями и тяжелый. Бедняжка несчастлива. У нее брат, вот что недавно женился на Лизе Мейнен, адъютант Кутузова, живет здесь и будет нынче у меня. Она единственная дочь. + -- Послушайте, милая Анет, -- сказал князь, взяв вдруг свою собеседницу за руку и пригибая ее почему-то книзу. -- Устройте мне это дело, и я ваш вернейший раб навсегда. Она хорошей фамилии и богата. Все, что мне нужно. + И он с теми свободными и фамильярными, грациозными движениями, которые его отличали, взял за руку фрейлину, поцеловал ее и, поцеловав, помахал фрейлинскою рукой, развалившись на креслах и глядя в сторону. + -- Подождите, -- сказала Анна Павловна, соображая. -- Я нынче же поговорю с Лизой, женой молодого Болконского. И, может быть, это уладится. Я в вашем семействе начну обучаться ремеслу старой девы. From 9a96484c27fe0338711e544f984cfbda7f1e6e9f Mon Sep 17 00:00:00 2001 From: AlexanderMNK Date: Mon, 1 Sep 2025 13:32:51 +0300 Subject: [PATCH 18/21] Default path changed. --- .../java/com/javarush/minka/CryptoAction.java | 4 +++- .../com/javarush/minka/InputParamsReader.java | 21 ++++++++++++------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/javarush/minka/CryptoAction.java b/src/main/java/com/javarush/minka/CryptoAction.java index 44c5a59..f9c6df1 100644 --- a/src/main/java/com/javarush/minka/CryptoAction.java +++ b/src/main/java/com/javarush/minka/CryptoAction.java @@ -3,7 +3,7 @@ import java.io.*; public abstract class CryptoAction { - public void process(String inputFilePath, String outputFilePath, int key) throws IOException { + public void process(String inputFilePath, String outputFilePath, int key) { try ( BufferedReader reader = new BufferedReader(new FileReader(inputFilePath)); BufferedWriter writer = new BufferedWriter(new FileWriter(outputFilePath)) @@ -14,6 +14,8 @@ public void process(String inputFilePath, String outputFilePath, int key) throws char changed = transform(c, key); writer.write(changed); } + } catch (Exception e) { + System.out.println("Что-то пошло не так \uD83E\uDD14 " + e.getMessage()); } } diff --git a/src/main/java/com/javarush/minka/InputParamsReader.java b/src/main/java/com/javarush/minka/InputParamsReader.java index 9c1f820..5f55acb 100644 --- a/src/main/java/com/javarush/minka/InputParamsReader.java +++ b/src/main/java/com/javarush/minka/InputParamsReader.java @@ -1,8 +1,13 @@ package com.javarush.minka; +import java.io.File; import java.util.Scanner; public class InputParamsReader { + private static final String DEFAULT_DIRECTORY = System.getProperty("user.dir") + + File.separator + "text" + File.separator; + private static final String DEFAULT_SOURCE_FILE = DEFAULT_DIRECTORY + "text.txt"; + private static final String DEFAULT_OUTPUT_FILE = DEFAULT_DIRECTORY + "output.txt"; private final Scanner scanner; private final DefaultFilePathBuilder filePathBuilder; @@ -12,33 +17,33 @@ public InputParamsReader(Scanner scanner, DefaultFilePathBuilder filePathBuilder } public String readInputFile() { - System.out.print("Использовать input.txt по умолчанию? (y/n): "); + System.out.print("Исходный файл по умолчанию для шифрования/дешифрования " + DEFAULT_SOURCE_FILE + " (y/n): "); String useDefault = scanner.nextLine(); if (useDefault.equalsIgnoreCase("y")) { - return filePathBuilder.buildAbsolutePath("input.txt"); + return filePathBuilder.buildAbsolutePath(DEFAULT_SOURCE_FILE); } - System.out.print("Введите абсолютный путь к входному файлу: "); + System.out.print("Введите абсолютный путь к исходному файлу: "); return scanner.nextLine(); } public String readOutputFile() { - System.out.print("Использовать output.txt по умолчанию? (y/n): "); + System.out.print("Результирующий Файл по умолчанию с результатами шифрования/дешифрования " + DEFAULT_OUTPUT_FILE + " (y/n): "); String useDefault = scanner.nextLine(); if (useDefault.equalsIgnoreCase("y")) { - return filePathBuilder.buildAbsolutePath("output.txt"); + return filePathBuilder.buildAbsolutePath(DEFAULT_OUTPUT_FILE); } - System.out.print("Введите абсолютный путь к выходному файлу: "); + System.out.print("Введите абсолютный путь к файлу для вывода результатов: "); return scanner.nextLine(); } public int readKey() { - System.out.print("Введите числовой ключ: "); + System.out.print("Введите числовой ключ (положительное значение): "); while (true) { String input = scanner.nextLine(); try { return Integer.parseInt(input); } catch (Exception e) { - System.out.print("Некорректный ввод. Попробуйте еще раз: "); + System.out.print("Введённое значение ключа не корректно. Попробуйте еще раз: "); } } } From 34700174be9492ff3d984b2e8159e4aa93bc6d6b Mon Sep 17 00:00:00 2001 From: AlexanderMNK Date: Mon, 1 Sep 2025 14:38:40 +0300 Subject: [PATCH 19/21] =?UTF-8?q?=D0=A1hanged=20Encrypt=20and=20Decrypt.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/javarush/minka/ConsoleRunner.java | 1 + src/main/java/com/javarush/minka/Decrypt.java | 8 ++++++-- src/main/java/com/javarush/minka/Encrypt.java | 8 ++++++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/javarush/minka/ConsoleRunner.java b/src/main/java/com/javarush/minka/ConsoleRunner.java index 008d6c8..582a578 100644 --- a/src/main/java/com/javarush/minka/ConsoleRunner.java +++ b/src/main/java/com/javarush/minka/ConsoleRunner.java @@ -10,6 +10,7 @@ public static void main(String[] args) { InputParamsReader inputParamsReader = new InputParamsReader(scanner, filePathBuilder); CryptoProcessor cryptoProcessor = new CryptoProcessor(); CryptoApp cryptoApp = new CryptoApp(cryptoProcessor, menu, inputParamsReader, scanner); + cryptoApp.run(); } } \ No newline at end of file diff --git a/src/main/java/com/javarush/minka/Decrypt.java b/src/main/java/com/javarush/minka/Decrypt.java index a547ee8..c424249 100644 --- a/src/main/java/com/javarush/minka/Decrypt.java +++ b/src/main/java/com/javarush/minka/Decrypt.java @@ -4,9 +4,13 @@ public class Decrypt extends CryptoAction { @Override protected char transform(char c, int key) { Integer index = getIndex(c); - if (index == null) return c; + if (index == null) { + return c; + } int newIndex = (index - key) % Alphabet.chars.length; - if (newIndex < 0) newIndex += Alphabet.chars.length; + if (newIndex < 0) { + newIndex += Alphabet.chars.length; + } return Alphabet.chars[newIndex]; } } diff --git a/src/main/java/com/javarush/minka/Encrypt.java b/src/main/java/com/javarush/minka/Encrypt.java index e7358ae..46462bf 100644 --- a/src/main/java/com/javarush/minka/Encrypt.java +++ b/src/main/java/com/javarush/minka/Encrypt.java @@ -4,9 +4,13 @@ public class Encrypt extends CryptoAction { @Override protected char transform(char c, int key) { Integer index = getIndex(c); - if (index == null) return c; + if (index == null) { + return c; + } int newIndex = (index + key) % Alphabet.chars.length; - if (newIndex < 0) newIndex += Alphabet.chars.length; + if (newIndex < 0) { + newIndex += Alphabet.chars.length; + } return Alphabet.chars[newIndex]; } } From 35b74456fe0296a2720badc4528313d3318d151a Mon Sep 17 00:00:00 2001 From: AlexanderMNK Date: Wed, 3 Sep 2025 11:44:10 +0300 Subject: [PATCH 20/21] Exceptions have been improved. --- src/main/java/com/javarush/minka/CryptoAction.java | 4 ++-- src/main/java/com/javarush/minka/CryptoApp.java | 5 +++-- src/main/java/com/javarush/minka/InputParamsReader.java | 6 +++--- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/javarush/minka/CryptoAction.java b/src/main/java/com/javarush/minka/CryptoAction.java index f9c6df1..5361280 100644 --- a/src/main/java/com/javarush/minka/CryptoAction.java +++ b/src/main/java/com/javarush/minka/CryptoAction.java @@ -14,8 +14,8 @@ public void process(String inputFilePath, String outputFilePath, int key) { char changed = transform(c, key); writer.write(changed); } - } catch (Exception e) { - System.out.println("Что-то пошло не так \uD83E\uDD14 " + e.getMessage()); + } catch (RuntimeException | IOException e) { + throw new RuntimeException(e); } } diff --git a/src/main/java/com/javarush/minka/CryptoApp.java b/src/main/java/com/javarush/minka/CryptoApp.java index d80eb01..c360993 100644 --- a/src/main/java/com/javarush/minka/CryptoApp.java +++ b/src/main/java/com/javarush/minka/CryptoApp.java @@ -1,5 +1,6 @@ package com.javarush.minka; +import java.io.IOException; import java.util.Scanner; public class CryptoApp { @@ -25,7 +26,7 @@ public void run() { try { cryptoProcessor.encrypt(inputFile, outputFile, key); System.out.println("Шифрование завершено! Результат: " + outputFile); - } catch (Exception e) { + } catch (RuntimeException | IOException e) { System.out.println("Ошибка: " + e.getMessage()); } } else if (choice == 2) { @@ -35,7 +36,7 @@ public void run() { try { cryptoProcessor.decrypt(inputFile, outputFile, key); System.out.println("Дешифрование завершено! Результат: " + outputFile); - } catch (Exception e) { + } catch (RuntimeException | IOException e) { System.out.println("Ошибка: " + e.getMessage()); } } else if (choice == 3) { diff --git a/src/main/java/com/javarush/minka/InputParamsReader.java b/src/main/java/com/javarush/minka/InputParamsReader.java index 5f55acb..ae602ea 100644 --- a/src/main/java/com/javarush/minka/InputParamsReader.java +++ b/src/main/java/com/javarush/minka/InputParamsReader.java @@ -17,7 +17,7 @@ public InputParamsReader(Scanner scanner, DefaultFilePathBuilder filePathBuilder } public String readInputFile() { - System.out.print("Исходный файл по умолчанию для шифрования/дешифрования " + DEFAULT_SOURCE_FILE + " (y/n): "); + System.out.print("Исходный файл по умолчанию " + DEFAULT_SOURCE_FILE + " (y/n): "); String useDefault = scanner.nextLine(); if (useDefault.equalsIgnoreCase("y")) { return filePathBuilder.buildAbsolutePath(DEFAULT_SOURCE_FILE); @@ -27,7 +27,7 @@ public String readInputFile() { } public String readOutputFile() { - System.out.print("Результирующий Файл по умолчанию с результатами шифрования/дешифрования " + DEFAULT_OUTPUT_FILE + " (y/n): "); + System.out.print("Результирующий Файл по умолчанию " + DEFAULT_OUTPUT_FILE + " (y/n): "); String useDefault = scanner.nextLine(); if (useDefault.equalsIgnoreCase("y")) { return filePathBuilder.buildAbsolutePath(DEFAULT_OUTPUT_FILE); @@ -42,7 +42,7 @@ public int readKey() { String input = scanner.nextLine(); try { return Integer.parseInt(input); - } catch (Exception e) { + } catch (RuntimeException e) { System.out.print("Введённое значение ключа не корректно. Попробуйте еще раз: "); } } From c53bb952e2236173d0e5ce85d7d0507d9c2ce6d0 Mon Sep 17 00:00:00 2001 From: AlexanderMNK Date: Thu, 4 Sep 2025 10:34:49 +0300 Subject: [PATCH 21/21] That's all for now, I'll work on it at a new level later. --- src/main/java/com/javarush/minka/ConsoleRunner.java | 1 + src/main/java/com/javarush/minka/CryptoAction.java | 1 + src/main/java/com/javarush/minka/CryptoApp.java | 5 ++++- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/javarush/minka/ConsoleRunner.java b/src/main/java/com/javarush/minka/ConsoleRunner.java index 582a578..cd74b3c 100644 --- a/src/main/java/com/javarush/minka/ConsoleRunner.java +++ b/src/main/java/com/javarush/minka/ConsoleRunner.java @@ -5,6 +5,7 @@ public class ConsoleRunner { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); + Menu menu = new Menu(); DefaultFilePathBuilder filePathBuilder = new DefaultFilePathBuilder(); InputParamsReader inputParamsReader = new InputParamsReader(scanner, filePathBuilder); diff --git a/src/main/java/com/javarush/minka/CryptoAction.java b/src/main/java/com/javarush/minka/CryptoAction.java index 5361280..d75be19 100644 --- a/src/main/java/com/javarush/minka/CryptoAction.java +++ b/src/main/java/com/javarush/minka/CryptoAction.java @@ -9,6 +9,7 @@ public void process(String inputFilePath, String outputFilePath, int key) { BufferedWriter writer = new BufferedWriter(new FileWriter(outputFilePath)) ) { int symbol; + while ((symbol = reader.read()) != -1) { char c = (char) symbol; char changed = transform(c, key); diff --git a/src/main/java/com/javarush/minka/CryptoApp.java b/src/main/java/com/javarush/minka/CryptoApp.java index c360993..d1be291 100644 --- a/src/main/java/com/javarush/minka/CryptoApp.java +++ b/src/main/java/com/javarush/minka/CryptoApp.java @@ -19,10 +19,12 @@ public CryptoApp(CryptoProcessor cryptoProcessor, Menu menu, InputParamsReader i public void run() { while (true) { int choice = menu.showMainMenu(scanner); + if (choice == 1) { String inputFile = inputParamsReader.readInputFile(); String outputFile = inputParamsReader.readOutputFile(); int key = inputParamsReader.readKey(); + try { cryptoProcessor.encrypt(inputFile, outputFile, key); System.out.println("Шифрование завершено! Результат: " + outputFile); @@ -33,11 +35,12 @@ public void run() { String inputFile = inputParamsReader.readInputFile(); String outputFile = inputParamsReader.readOutputFile(); int key = inputParamsReader.readKey(); + try { cryptoProcessor.decrypt(inputFile, outputFile, key); System.out.println("Дешифрование завершено! Результат: " + outputFile); } catch (RuntimeException | IOException e) { - System.out.println("Ошибка: " + e.getMessage()); + System.out.println("Ошибка " + e.getMessage()); } } else if (choice == 3) { System.out.println("Выход.");