diff --git a/src/main/java/com/javarush/baeramshina/ConsoleReader.java b/src/main/java/com/javarush/baeramshina/ConsoleReader.java new file mode 100644 index 0000000..70f08ec --- /dev/null +++ b/src/main/java/com/javarush/baeramshina/ConsoleReader.java @@ -0,0 +1,17 @@ +package com.javarush.baeramshina; + +import java.util.Scanner; + +public class ConsoleReader extends InputReader { + private final Scanner console; + + public ConsoleReader(Scanner console){ + this.console=console; + } + + @Override + public String readInput() { + System.out.println("Введите текст: "); + return console.nextLine(); + } +} diff --git a/src/main/java/com/javarush/baeramshina/ConsoleRunner.java b/src/main/java/com/javarush/baeramshina/ConsoleRunner.java new file mode 100644 index 0000000..cf3db18 --- /dev/null +++ b/src/main/java/com/javarush/baeramshina/ConsoleRunner.java @@ -0,0 +1,108 @@ +package com.javarush.baeramshina; + +import java.util.Map; +import java.util.Scanner; + +import static com.javarush.baeramshina.Decrypt.decryptText; +import static com.javarush.baeramshina.Encrypt.encryptText; + + +public class ConsoleRunner { + private static String originalText = null; + private static String encryptedText = null; + private static String decryptedText = null; + + + public static void main(String[] args) { + + Scanner console = new Scanner(System.in); + MenuOption selectedOption; + + while (true) { + MenuOption.printMenu(); + + String input = console.nextLine(); + try { + int optionNumber = Integer.parseInt(input); + selectedOption = MenuOption.getOptionByNumber(optionNumber); + if (selectedOption == null) { + System.out.println("Некорректный выбор, попробуйте еще."); + continue; + } + switch (selectedOption) { + + case READ_CONSOLE: + handleReadConsole(console); + break; + case READ_FILE: + handleReadFile(console); + break; + case ENCRYPT: + handleEncrypt(); + break; + case DECRYPT: + handleDecrypt(); + break; + case WRITE_FILE: + handleWriteFile(); + break; + case EXIT: + System.out.println("Выход"); + break; + default: + + break; + } + + } catch (NumberFormatException e) { + System.out.println("Пожалуйста, введите число."); + } + } + } + + + private static void handleReadFile(Scanner console) { + InputReader readFile = new ReadFile("text/dict.txt"); + String fileContent = readFile.readInput(); + if (fileContent != null) { + originalText = fileContent; + System.out.println("Текст прочитан" + originalText); + } else { + System.out.println("Файл пуст или не найден"); + + } + } + + private static void handleReadConsole(Scanner console) { + InputReader consoleReader = new ConsoleReader(console); + String readInput = consoleReader.readInput(); + if (readInput != null) { + originalText = readInput; + System.out.println("Текс введен: " + originalText); + } else { + System.out.println("Текст отсутствует"); + } + } + + private static void handleEncrypt() { + + Map caesarCipher = LogicEncrypted.createCaesarCipher(5); + encryptedText = encryptText(originalText, caesarCipher); + System.out.println("Зашифрованный текст " + encryptedText); + } + private static void handleWriteFile(){ + WriteFile.writeToFile(encryptedText, "text/encrypt.txt"); + System.out.println("Зашифрованный текст записан в файл ext/encrypt.txt");} + + private static void handleDecrypt() { + + Map deCipher = LogicDecrypted.cancelsCaesarCipher(5); + decryptedText = decryptText(encryptedText, deCipher); + System.out.println("Расшифрованный текст " + decryptedText); + + + } +} + + + diff --git a/src/main/java/com/javarush/baeramshina/Decrypt.java b/src/main/java/com/javarush/baeramshina/Decrypt.java new file mode 100644 index 0000000..119912d --- /dev/null +++ b/src/main/java/com/javarush/baeramshina/Decrypt.java @@ -0,0 +1,24 @@ +package com.javarush.baeramshina; + +import java.util.Map; + +public class Decrypt { + public static String decryptText(String text, Map cipherMap) { + StringBuilder result = new StringBuilder(); + for (char c : text.toCharArray()) { + if (cipherMap.containsKey(c)) { + result.append(cipherMap.get(c)); + } else { + result.append(c); + } + } + return result.toString(); + } +} + + + + + + + diff --git a/src/main/java/com/javarush/baeramshina/Encrypt.java b/src/main/java/com/javarush/baeramshina/Encrypt.java new file mode 100644 index 0000000..f8a982d --- /dev/null +++ b/src/main/java/com/javarush/baeramshina/Encrypt.java @@ -0,0 +1,20 @@ +package com.javarush.baeramshina; + +import java.util.Map; + +public class Encrypt { + public static String encryptText(String text, Map cipherMap) { + StringBuilder result = new StringBuilder(); + for (char c : text.toCharArray()) { + if (cipherMap.containsKey(c)) { + result.append(cipherMap.get(c)); + } else { + result.append(c); + } + } + return result.toString(); + } +} + + + diff --git a/src/main/java/com/javarush/baeramshina/InputReader.java b/src/main/java/com/javarush/baeramshina/InputReader.java new file mode 100644 index 0000000..ead1a71 --- /dev/null +++ b/src/main/java/com/javarush/baeramshina/InputReader.java @@ -0,0 +1,5 @@ +package com.javarush.baeramshina; + +public abstract class InputReader { + public abstract String readInput(); +} diff --git a/src/main/java/com/javarush/baeramshina/LogicDecrypted.java b/src/main/java/com/javarush/baeramshina/LogicDecrypted.java new file mode 100644 index 0000000..4805dd0 --- /dev/null +++ b/src/main/java/com/javarush/baeramshina/LogicDecrypted.java @@ -0,0 +1,25 @@ +package com.javarush.baeramshina; + +import java.util.HashMap; +import java.util.Map; + +public class LogicDecrypted { + public static Map cancelsCaesarCipher(int shift) { + Map map = new HashMap<>(); + int length = Symbols.symbols.length; + + for (int i = 0; i < length; i++) { + char original = Symbols.symbols[i]; + int shiftIndex = (i - shift + length) % length; + + char decrypt = Symbols.symbols[shiftIndex]; + map.put(original, decrypt); + + + } + + return map; + } + + +} diff --git a/src/main/java/com/javarush/baeramshina/LogicEncrypted.java b/src/main/java/com/javarush/baeramshina/LogicEncrypted.java new file mode 100644 index 0000000..d043e5c --- /dev/null +++ b/src/main/java/com/javarush/baeramshina/LogicEncrypted.java @@ -0,0 +1,27 @@ +package com.javarush.baeramshina; + +import java.util.HashMap; +import java.util.Map; + +public class LogicEncrypted { + public static Map createCaesarCipher(int shift) { + Map map = new HashMap<>(); + int length = Symbols.symbols.length; + + for (int i = 0; i < length; i++) { + char original = Symbols.symbols[i]; + int shiftIndex = (i + shift) % length; + if (shiftIndex < 0) { + shiftIndex += length; + } + char encrypt = Symbols.symbols[shiftIndex]; + map.put(original, encrypt); + + + } + + return map; + } + +} + diff --git a/src/main/java/com/javarush/baeramshina/MenuOption.java b/src/main/java/com/javarush/baeramshina/MenuOption.java new file mode 100644 index 0000000..0ddd8a7 --- /dev/null +++ b/src/main/java/com/javarush/baeramshina/MenuOption.java @@ -0,0 +1,37 @@ +package com.javarush.baeramshina; + +public enum MenuOption { + READ_CONSOLE("Прочитать с консоли"), + READ_FILE("Прочитать файл"), + ENCRYPT("Зашифровать текст"), + DECRYPT("Расшифровать текст"), + WRITE_FILE("Записать зашифрованный текст в отдельный файл"), + EXIT("Выход"); + + private final String description; + + MenuOption(String description) { + this.description = description; + } + + public String getDescription() { + return description; + } + + public static void printMenu() { + System.out.println("\nВыберите действие:"); + for (MenuOption value : MenuOption.values()) { + System.out.println((value.ordinal() + 1) + ". " + value.getDescription()); + } + System.out.println("Вы выбрали: "); + + } + public static MenuOption getOptionByNumber(int number){ + MenuOption[] options = MenuOption.values(); + if (number > 0 && number <= options.length) { + return options[number-1]; + } + return null; + } + } + diff --git a/src/main/java/com/javarush/baeramshina/ReadFile.java b/src/main/java/com/javarush/baeramshina/ReadFile.java new file mode 100644 index 0000000..9777821 --- /dev/null +++ b/src/main/java/com/javarush/baeramshina/ReadFile.java @@ -0,0 +1,35 @@ +package com.javarush.baeramshina; + +import java.io.BufferedReader; + +import java.io.FileReader; +import java.io.IOException; + +public class ReadFile extends InputReader { + private final String filePath; + + public ReadFile(String filePath) { + this.filePath = filePath; + } + + @Override + public String readInput() { + + StringBuilder info = new StringBuilder(); + try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) { + String line; + while((line =reader.readLine())!=null) + + { + info.append(line).append("\n"); + + System.out.println(line); + } + } catch(IOException e) { + System.out.println("Ошибка при чтении файла!!!"); + + e.printStackTrace(); + } + return info.toString().trim(); + } +} diff --git a/src/main/java/com/javarush/baeramshina/Symbols.java b/src/main/java/com/javarush/baeramshina/Symbols.java new file mode 100644 index 0000000..aa9a2bf --- /dev/null +++ b/src/main/java/com/javarush/baeramshina/Symbols.java @@ -0,0 +1,13 @@ +package com.javarush.baeramshina; + +public class Symbols { + public static final char[] symbols = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя.,' '«»:!?1234567890".toCharArray(); + + public static void printSymbols() { + for (char c : symbols) { + System.out.print(c + " "); + } + System.out.println(); + } +} + diff --git a/src/main/java/com/javarush/baeramshina/WriteFile.java b/src/main/java/com/javarush/baeramshina/WriteFile.java new file mode 100644 index 0000000..04a67e6 --- /dev/null +++ b/src/main/java/com/javarush/baeramshina/WriteFile.java @@ -0,0 +1,17 @@ +package com.javarush.baeramshina; + +import java.io.BufferedWriter; +import java.io.FileWriter; +import java.io.IOException; + +public class WriteFile { + public static void writeToFile(String text, String filePath){ + try (BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filePath))){ + bufferedWriter.write(text); + System.out.println("Текст успешно записан: "+filePath); + } + catch (IOException e){ + System.out.println("Ошибка при записи файла"); + } + } +}