From 8238586f288dad61374c5428b5795d138521c67f Mon Sep 17 00:00:00 2001 From: "koblevmurat@gmail.com" Date: Fri, 15 Nov 2019 16:40:33 +0300 Subject: [PATCH 1/3] =?UTF-8?q?=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20appender?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- task3/src/main/java/FileUtility.java | 48 +++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/task3/src/main/java/FileUtility.java b/task3/src/main/java/FileUtility.java index be6a3ae..d1204a9 100644 --- a/task3/src/main/java/FileUtility.java +++ b/task3/src/main/java/FileUtility.java @@ -3,6 +3,27 @@ public class FileUtility { + + + private void ReadFile(String _FileName) { + + /* try (BufferedWriter writer = new BufferedWriter(new FileWriter(_FileName))) { + for (int i = 0; i < 20; i++) { + writer.write("Java\n"); + } + } catch (IOException e) { + e.printStackTrace(); + }*/ + + try (BufferedReader reader = new BufferedReader(new FileReader(_FileName))) { + String str; + while ((str = reader.readLine()) != null) { + System.out.println(str); + } + } catch (IOException e) { + e.printStackTrace(); + } + } /* * Структура файла ввода: в первой строке одно целое число - N * далее следует N целых чисел через пробел @@ -37,7 +58,32 @@ public void passwordGen(File in, File out){ * записи из списка по одной записи в строке * */ public void appender(File file, List records){ - //TODO + + try (RandomAccessFile raf = new RandomAccessFile(file, "rw")) { + + byte[] bb = new byte[(int)file.length()]; + raf.readFully(bb); + raf.seek(0); + for (String record : + records) { + raf.writeBytes(record); + } + raf.write(bb); + } catch (IOException e) { + e.printStackTrace(); + } + + return; + + /* try (BufferedWriter writer = new BufferedWriter(new FileWriter(file) )) { + + for (String record : + records) { + writer.append(record); + } + } catch (IOException e) { + e.printStackTrace(); + }*/ } /* From aeb5573b1c0e373350a28a81cd052c06cc103d29 Mon Sep 17 00:00:00 2001 From: "koblevmurat@gmail.com" Date: Sun, 17 Nov 2019 17:40:15 +0300 Subject: [PATCH 2/3] =?UTF-8?q?=D0=BF=D1=80=D0=BE=D1=87=D0=B8=D1=82=D0=B0?= =?UTF-8?q?=D1=82=D1=8C=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=D0=B4=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=2010=20=D1=81=D1=82=D1=80=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- task3/src/main/java/FileUtility.java | 85 ++++++++++++++-------------- 1 file changed, 44 insertions(+), 41 deletions(-) diff --git a/task3/src/main/java/FileUtility.java b/task3/src/main/java/FileUtility.java index d1204a9..ae9ad6b 100644 --- a/task3/src/main/java/FileUtility.java +++ b/task3/src/main/java/FileUtility.java @@ -4,7 +4,6 @@ public class FileUtility { - private void ReadFile(String _FileName) { /* try (BufferedWriter writer = new BufferedWriter(new FileWriter(_FileName))) { @@ -24,15 +23,16 @@ private void ReadFile(String _FileName) { e.printStackTrace(); } } + /* - * Структура файла ввода: в первой строке одно целое число - N - * далее следует N целых чисел через пробел - * Метод должен отсортировать элементы с четным значением, - * а нечетные оставить на своих местах и вывести результат через пробел в файл вывода - * Пример: - * 5 - * 5 4 2 1 3 - * 5 2 4 1 3 + * Структура файла ввода: в первой строке одно целое число - N + * далее следует N целых чисел через пробел + * Метод должен отсортировать элементы с четным значением, + * а нечетные оставить на своих местах и вывести результат через пробел в файл вывода + * Пример: + * 5 + * 5 4 2 1 3 + * 5 2 4 1 3 */ public void sortEvenElements(File in, File out) { //TODO @@ -40,28 +40,28 @@ public void sortEvenElements(File in, File out) { } /* - * Генератор паролей, пароль должен отвечать требованиям: - * длина не менее 6 и не более 12, включает минимум по одному символу - * из наборов: a-z, A-Z, 0-9, {*,!,%} - * все пароли должны быть разными - * На вход метод получает файл с логинами пользователей - * Метод должен записать в файл вывода записи с логинами и паролями - * для каждого пользователя + * Генератор паролей, пароль должен отвечать требованиям: + * длина не менее 6 и не более 12, включает минимум по одному символу + * из наборов: a-z, A-Z, 0-9, {*,!,%} + * все пароли должны быть разными + * На вход метод получает файл с логинами пользователей + * Метод должен записать в файл вывода записи с логинами и паролями + * для каждого пользователя */ - public void passwordGen(File in, File out){ + public void passwordGen(File in, File out) { //TODO } /* - * Метод должен дописать в переданный файл все - * записи из списка по одной записи в строке - * */ - public void appender(File file, List records){ + * Метод должен дописать в переданный файл все + * записи из списка по одной записи в строке + * */ + public void appender(File file, List records) { try (RandomAccessFile raf = new RandomAccessFile(file, "rw")) { - byte[] bb = new byte[(int)file.length()]; + byte[] bb = new byte[(int) file.length()]; raf.readFully(bb); raf.seek(0); for (String record : @@ -75,29 +75,32 @@ public void appender(File file, List records){ return; - /* try (BufferedWriter writer = new BufferedWriter(new FileWriter(file) )) { + } - for (String record : - records) { - writer.append(record); - } + /* + * Метод возвращает список из N последних строк файла + * строки можно дополнять пробелами до длины 80 + * тогда количество символов в файле будет предсказуемо + * 10 строк это ровно 800 символов + * Изучите класс RandomAccessFile для эффективного решения данной + * задачи + * Альтернативное решение: использование очереди или стека + * */ + public List getNString(String pathToFile, int n) { + try (RandomAccessFile raf = new RandomAccessFile(pathToFile, "rw")) { + + List list = new ArrayList<>(); + File file = new File(pathToFile); + int pos = file.length() > 80 ? (int) file.length() - 80 : 0; //?((int)file.length()>80, (int) file.length()-80, 0); + byte[] bb = new byte[80]; //new byte[(int) file.length()]; + raf.readFully(bb, pos, 80); + raf.seek(pos); + + raf.write(bb); } catch (IOException e) { e.printStackTrace(); - }*/ - } + } - /* - * Метод возвращает список из N последних строк файла - * строки можно дополнять пробелами до длины 80 - * тогда количество символов в файле будет предсказуемо - * 10 строк это ровно 800 символов - * Изучите класс RandomAccessFile для эффективного решения данной - * задачи - * Альтернативное решение: использование очереди или стека - * */ - public List getNString(String pathToFile, int n){ - //TODO return null; } - } From 08e079475586364c6b7fce4961442861a80d09d9 Mon Sep 17 00:00:00 2001 From: "koblevmurat@gmail.com" Date: Sun, 17 Nov 2019 21:15:27 +0300 Subject: [PATCH 3/3] =?UTF-8?q?=D0=B4=D0=B7=20=D1=83=D1=80=D0=BE=D0=BA3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- task3/src/main/java/FileUtility.java | 75 ++++++++++++++++++++++++++-- 1 file changed, 72 insertions(+), 3 deletions(-) diff --git a/task3/src/main/java/FileUtility.java b/task3/src/main/java/FileUtility.java index ae9ad6b..eeee047 100644 --- a/task3/src/main/java/FileUtility.java +++ b/task3/src/main/java/FileUtility.java @@ -1,4 +1,5 @@ import java.io.*; +import java.lang.reflect.Array; import java.util.*; public class FileUtility { @@ -35,7 +36,36 @@ private void ReadFile(String _FileName) { * 5 2 4 1 3 */ public void sortEvenElements(File in, File out) { - //TODO + try (BufferedReader reader = new BufferedReader(new FileReader(in))) { + reader.readLine(); + String NumsParseString = reader.readLine(); + String sLine = NumsParseString; + + NumsParseString.replaceAll(" ", ""); + + List EvenNums = new ArrayList<>(); + for (int i = 0; i < NumsParseString.length(); i++) { + int x = Integer.parseInt(NumsParseString.substring(i, i + 1)); + if (x % 2 == 0) + EvenNums.add(x); + } + + Collections.sort(EvenNums); + StringBuilder NewLine = new StringBuilder(sLine); + + for (int i = 0; i < EvenNums.size(); i ++){ + for (int j = 0; j < NewLine.length(); j++) { + if (NewLine.substring(j, j+1)!= " "){ + int x = Integer.parseInt(NewLine.substring(j, j+1)); + if (x%2==0) + NewLine.replace(j, j+1,EvenNums.get(i).toString()); + } + } + } + + } catch (IOException e) { + e.printStackTrace(); + } } @@ -49,8 +79,47 @@ public void sortEvenElements(File in, File out) { * для каждого пользователя */ public void passwordGen(File in, File out) { - //TODO + List logins = new ArrayList<>(); + + try (BufferedReader reader = new BufferedReader(new FileReader(in)); + BufferedWriter writer = new BufferedWriter(new FileWriter(in)) + ) { + String str; + while ((str = reader.readLine()) != null) { + logins.add(str); + } + + for (String login : + logins) { + String pass = randomPass(6); + writer.write(login + " " + pass); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + private String randomPass(int len) { + Random random = new Random(); + + StringBuilder pass = new StringBuilder(); + String alphabet = "qwertyuiopasdfghjklzxcvbnm"; + String nums = "0123456789"; + String signs = "?> getNString(String pathToFile, int n) { File file = new File(pathToFile); int pos = file.length() > 80 ? (int) file.length() - 80 : 0; //?((int)file.length()>80, (int) file.length()-80, 0); byte[] bb = new byte[80]; //new byte[(int) file.length()]; - raf.readFully(bb, pos, 80); + //raf.readFully(bb, pos, 80); raf.seek(pos); raf.write(bb);