From 0268c20c433a5d4ab457edea5038cf4e886a00cf Mon Sep 17 00:00:00 2001 From: Vlad Date: Wed, 23 Sep 2020 20:04:43 +0400 Subject: [PATCH 1/3] added implementation --- java-data-handling-template.iml | 23 +++++ .../repository/SimpleFileRepository.java | 92 ++++++++++++++++++- .../rd/online/service/SieveEratosthenes.java | 52 +++++++++++ .../service/SimpleBigNumbersService.java | 9 +- .../rd/online/service/SimpleDateService.java | 29 +++++- .../online/service/SimpleRegExpService.java | 38 +++++++- .../rd/online/service/SimpleTextService.java | 49 +++++++--- .../izh/rd/online/BigNumbersServiceTest.java | 8 ++ .../izh/rd/online/FileRepositoryTest.java | 11 +-- .../epam/izh/rd/online/RegExpServiceTest.java | 2 +- 10 files changed, 279 insertions(+), 34 deletions(-) create mode 100644 java-data-handling-template.iml create mode 100644 src/main/java/com/epam/izh/rd/online/service/SieveEratosthenes.java diff --git a/java-data-handling-template.iml b/java-data-handling-template.iml new file mode 100644 index 00000000..5e9ffdc5 --- /dev/null +++ b/java-data-handling-template.iml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/epam/izh/rd/online/repository/SimpleFileRepository.java b/src/main/java/com/epam/izh/rd/online/repository/SimpleFileRepository.java index 1783b845..2a747448 100644 --- a/src/main/java/com/epam/izh/rd/online/repository/SimpleFileRepository.java +++ b/src/main/java/com/epam/izh/rd/online/repository/SimpleFileRepository.java @@ -1,5 +1,14 @@ package com.epam.izh.rd.online.repository; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; + public class SimpleFileRepository implements FileRepository { /** @@ -10,7 +19,25 @@ public class SimpleFileRepository implements FileRepository { */ @Override public long countFilesInDirectory(String path) { - return 0; + if (path.length() < "src/main/resources/".length()) { + path = "src/main/resources/" + path; + } + + File file = new File(path); + File[] directory = file.listFiles(); + + long count = 0; + + if (directory != null) { + for (File item : directory) { + if (!item.isFile()) { + count += countFilesInDirectory(item.getPath()); + } else { + count++; + } + } + } + return count; } /** @@ -21,7 +48,25 @@ public long countFilesInDirectory(String path) { */ @Override public long countDirsInDirectory(String path) { - return 0; + long count = 0; + if (path.length() < "src/main/resources/".length()) { + path = "src/main/resources/" + path; + count++; + } + + File file = new File(path); + File[] directory = file.listFiles(); + + + if (directory != null) { + for (File item : directory) { + if (item.isDirectory()) { + count++; + count += countDirsInDirectory(item.getPath()); + } + } + } + return count; } /** @@ -32,7 +77,22 @@ public long countDirsInDirectory(String path) { */ @Override public void copyTXTFiles(String from, String to) { - return; + File folder = new File(from); + + File[] listOfFiles = folder.listFiles(); + + Path destDir = Paths.get(to); + if (listOfFiles != null) { + for (File file : listOfFiles) { + try { + if (file.getAbsolutePath().endsWith(".txt")) { + Files.copy(file.toPath(), destDir.resolve(file.getName()), StandardCopyOption.REPLACE_EXISTING); + } + } catch (IOException ioex) { + ioex.printStackTrace(); + } + } + } } /** @@ -44,6 +104,21 @@ public void copyTXTFiles(String from, String to) { */ @Override public boolean createFile(String path, String name) { + if (path.length() < "src/main/resources/".length()) { + path = "src/main/resources/" + path; + } + + File folder = new File(path); + if (!folder.exists()) { + folder.mkdir(); + } + + File file = new File(path + "/" + name); + try { + return file.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } return false; } @@ -55,6 +130,15 @@ public boolean createFile(String path, String name) { */ @Override public String readFileFromResources(String fileName) { - return null; + StringBuilder stringBuilder = new StringBuilder(); + try (BufferedReader is = new BufferedReader(new FileReader("src/main/resources/" + fileName))) { + String line; + while ((line = is.readLine()) != null) { + stringBuilder.append(line); + } + } catch (IOException ioex) { + ioex.printStackTrace(); + } + return stringBuilder.toString(); } } diff --git a/src/main/java/com/epam/izh/rd/online/service/SieveEratosthenes.java b/src/main/java/com/epam/izh/rd/online/service/SieveEratosthenes.java new file mode 100644 index 00000000..b8d6f9a1 --- /dev/null +++ b/src/main/java/com/epam/izh/rd/online/service/SieveEratosthenes.java @@ -0,0 +1,52 @@ +package com.epam.izh.rd.online.service; + +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.List; + +class SieveEratosthenes { + + private static class PrimePair { + BigInteger prime; + BigInteger lastCrossed; + + PrimePair(BigInteger prime, BigInteger lastCrossed) { + this.prime = prime; + this.lastCrossed = lastCrossed; + } + } + + private List primes; + + SieveEratosthenes() { + primes = new ArrayList<>(); + primes.add(new PrimePair(new BigInteger("2"), new BigInteger("2"))); + primes.add(new PrimePair(new BigInteger("3"), new BigInteger("3"))); + } + + public BigInteger fillNPrimes(int n) { + if (n >= 0 && n <= 1) { + return primes.get(n).prime; + } + while (primes.size() <= n) { + addNextPrime(); + } + return primes.get(primes.size() - 1).prime; + } + + private void addNextPrime() { + BigInteger candidate = primes.get(primes.size() - 1).prime.add(new BigInteger("2")); + for (int i = 1; i < primes.size(); i++) { + PrimePair p = primes.get(i); + while (p.lastCrossed.compareTo(candidate) < 0) { + p.lastCrossed = p.lastCrossed.add(p.prime); + } + if (p.lastCrossed.compareTo(candidate) == 0) { + candidate = candidate.add(new BigInteger("2")); + i = -1; + } + } + primes.add(new PrimePair(candidate, candidate)); + } +} + diff --git a/src/main/java/com/epam/izh/rd/online/service/SimpleBigNumbersService.java b/src/main/java/com/epam/izh/rd/online/service/SimpleBigNumbersService.java index a94c7bba..17aa7304 100644 --- a/src/main/java/com/epam/izh/rd/online/service/SimpleBigNumbersService.java +++ b/src/main/java/com/epam/izh/rd/online/service/SimpleBigNumbersService.java @@ -2,18 +2,21 @@ import java.math.BigDecimal; import java.math.BigInteger; +import java.math.RoundingMode; public class SimpleBigNumbersService implements BigNumbersService { /** * Метод делит первое число на второе с заданной точностью * Например 1/3 с точностью 2 = 0.33 + * * @param range точность * @return результат */ @Override public BigDecimal getPrecisionNumber(int a, int b, int range) { - return null; + BigDecimal[] bigDecimals = {new BigDecimal(a), new BigDecimal(b)}; + return bigDecimals[0].divide(bigDecimals[1], range, RoundingMode.HALF_UP); } /** @@ -24,6 +27,8 @@ public BigDecimal getPrecisionNumber(int a, int b, int range) { */ @Override public BigInteger getPrimaryNumber(int range) { - return null; + SieveEratosthenes sieveEratosthenes = new SieveEratosthenes(); + return sieveEratosthenes.fillNPrimes(range); } } + diff --git a/src/main/java/com/epam/izh/rd/online/service/SimpleDateService.java b/src/main/java/com/epam/izh/rd/online/service/SimpleDateService.java index 70d64dfd..85eefc5e 100644 --- a/src/main/java/com/epam/izh/rd/online/service/SimpleDateService.java +++ b/src/main/java/com/epam/izh/rd/online/service/SimpleDateService.java @@ -1,8 +1,12 @@ package com.epam.izh.rd.online.service; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.util.Calendar; +import java.util.GregorianCalendar; public class SimpleDateService implements DateService { @@ -14,7 +18,8 @@ public class SimpleDateService implements DateService { */ @Override public String parseDate(LocalDate localDate) { - return null; + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy"); + return localDate.format(formatter); } /** @@ -25,7 +30,8 @@ public String parseDate(LocalDate localDate) { */ @Override public LocalDateTime parseString(String string) { - return null; + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); + return LocalDateTime.parse(string, formatter); } /** @@ -37,7 +43,8 @@ public LocalDateTime parseString(String string) { */ @Override public String convertToCustomFormat(LocalDate localDate, DateTimeFormatter formatter) { - return null; + + return localDate.format(formatter); } /** @@ -47,7 +54,14 @@ public String convertToCustomFormat(LocalDate localDate, DateTimeFormatter forma */ @Override public long getNextLeapYear() { - return 0; + GregorianCalendar calendar = (GregorianCalendar) GregorianCalendar.getInstance(); + int leapYear = calendar.get(GregorianCalendar.YEAR); + for (; ; ) { + if (calendar.isLeapYear(leapYear)) { + return leapYear; + } + leapYear++; + } } /** @@ -57,7 +71,12 @@ public long getNextLeapYear() { */ @Override public long getSecondsInYear(int year) { - return 0; + GregorianCalendar calendar = (GregorianCalendar) GregorianCalendar.getInstance(); + if (calendar.isLeapYear(year)) { + return 366 * 24 * 60 * 60; + } else { + return 365 * 24 * 60 * 60; + } } diff --git a/src/main/java/com/epam/izh/rd/online/service/SimpleRegExpService.java b/src/main/java/com/epam/izh/rd/online/service/SimpleRegExpService.java index b6eff56b..0c59c5df 100644 --- a/src/main/java/com/epam/izh/rd/online/service/SimpleRegExpService.java +++ b/src/main/java/com/epam/izh/rd/online/service/SimpleRegExpService.java @@ -1,5 +1,13 @@ package com.epam.izh.rd.online.service; +import com.epam.izh.rd.online.repository.SimpleFileRepository; +import com.sun.xml.internal.ws.commons.xmlutil.Converter; +import sun.plugin2.message.Conversation; + +import java.io.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + public class SimpleRegExpService implements RegExpService { /** @@ -11,7 +19,16 @@ public class SimpleRegExpService implements RegExpService { */ @Override public String maskSensitiveData() { - return null; + StringBuilder stringBuilder = new StringBuilder( + new SimpleFileRepository().readFileFromResources("sensitive_data.txt") + ); + + Pattern pattern = Pattern.compile("((\\d){4}\\s?){4}"); + Matcher matcher = pattern.matcher(stringBuilder.toString()); + while (matcher.find()) { + stringBuilder.replace(matcher.start() + 4, matcher.end() - 5, " **** **** "); + } + return stringBuilder.toString(); } /** @@ -22,6 +39,23 @@ public String maskSensitiveData() { */ @Override public String replacePlaceholders(double paymentAmount, double balance) { - return null; + StringBuilder stringBuilder = new StringBuilder( + new SimpleFileRepository().readFileFromResources("sensitive_data.txt") + ); + + Pattern pattern = Pattern.compile("[$][{]{1}\\w+[}]{1}"); + Matcher matcher = pattern.matcher(stringBuilder.toString()); + + while (matcher.find()) { + if (stringBuilder.substring(matcher.start() + 2, matcher.end() - 1).equals("payment_amount")) { + stringBuilder.replace(matcher.start(), matcher.end(), String.format("%.0f", paymentAmount)); + matcher = pattern.matcher(stringBuilder.toString()); + } else if (stringBuilder.substring(matcher.start() + 2, matcher.end() - 1).equals("balance")) { + stringBuilder.replace(matcher.start(), matcher.end(), String.format("%.0f", balance)); + matcher = pattern.matcher(stringBuilder.toString()); + } + } + return stringBuilder.toString(); } + } diff --git a/src/main/java/com/epam/izh/rd/online/service/SimpleTextService.java b/src/main/java/com/epam/izh/rd/online/service/SimpleTextService.java index 68951fbe..5526abe6 100644 --- a/src/main/java/com/epam/izh/rd/online/service/SimpleTextService.java +++ b/src/main/java/com/epam/izh/rd/online/service/SimpleTextService.java @@ -1,64 +1,89 @@ package com.epam.izh.rd.online.service; +import java.lang.String; + public class SimpleTextService implements TextService { /** * Реализовать функционал удаления строки из другой строки. - * + *

* Например для базовой строки "Hello, hello, hello, how low?" и строки для удаления ", he" * метод вернет "Hellollollo, how low?" * - * @param base - базовая строка с текстом + * @param base - базовая строка с текстом * @param remove - строка которую необходимо удалить */ @Override public String removeString(String base, String remove) { - return null; //TODO + return base.replace(remove, ""); } /** * Реализовать функционал проверки на то, что строка заканчивается знаком вопроса. - * + *

* Например для строки "Hello, hello, hello, how low?" метод вернет true * Например для строки "Hello, hello, hello!" метод вернет false */ @Override public boolean isQuestionString(String text) { - return false; //TODO + return (text.length() > 0 && text.charAt(text.length() - 1) == '?'); } /** * Реализовать функционал соединения переданных строк. - * + *

* Например для параметров {"Smells", " ", "Like", " ", "Teen", " ", "Spirit"} * метод вернет "Smells Like Teen Spirit" */ @Override public String concatenate(String... elements) { - return null; //TODO + StringBuilder result = new StringBuilder(); + for (String str : elements) { + result.append(str); + } + return result.toString(); } /** * Реализовать функционал изменения регистра в вид лесенки. * Возвращаемый текст должен начинаться с прописного регистра. - * + *

* Например для строки "Load Up On Guns And Bring Your Friends" * метод вернет "lOaD Up oN GuNs aNd bRiNg yOuR FrIeNdS". */ @Override public String toJumpCase(String text) { - return null; //TODO + StringBuilder result = new StringBuilder(); + for (int i = 0; i < text.length(); i++) { + if ((i % 2) != 0) { + result.append(Character.toUpperCase(text.charAt(i))); + } else { + result.append(Character.toLowerCase(text.charAt(i))); + } + } + return result.toString(); } /** * Метод определяет, является ли строка палиндромом. - * + *

* Палиндром - строка, которая одинаково читается слева направо и справа налево. - * + *

* Например для строки "а роза упала на лапу Азора" вернется true, а для "я не палиндром" false */ @Override public boolean isPalindrome(String string) { - return false; //TODO + if (string.length() == 0) { + return false; + } + boolean palindrome = true; + string = removeString(string, " ").toLowerCase(); + for (int i = 0; i < string.length() / 2; i++) { + if (string.charAt(i) != string.charAt(string.length() - 1 - i)) { + palindrome = false; + break; + } + } + return palindrome; } } diff --git a/src/test/java/com/epam/izh/rd/online/BigNumbersServiceTest.java b/src/test/java/com/epam/izh/rd/online/BigNumbersServiceTest.java index d86a5fe3..8421507c 100644 --- a/src/test/java/com/epam/izh/rd/online/BigNumbersServiceTest.java +++ b/src/test/java/com/epam/izh/rd/online/BigNumbersServiceTest.java @@ -32,5 +32,13 @@ void testGetPrecisionNumber() { void testGetPrimaryNumber() { assertEquals(BigInteger.valueOf(547), bigNumbersService.getPrimaryNumber(100), "Для вызова метода: bigNumbersService.getPrimaryNumber(100)"); + assertEquals(BigInteger.valueOf(2), bigNumbersService.getPrimaryNumber(0), + "Для вызова метода: bigNumbersService.getPrimaryNumber(100)"); + assertEquals(BigInteger.valueOf(3), bigNumbersService.getPrimaryNumber(1), + "Для вызова метода: bigNumbersService.getPrimaryNumber(100)"); + assertEquals(BigInteger.valueOf(5), bigNumbersService.getPrimaryNumber(2), + "Для вызова метода: bigNumbersService.getPrimaryNumber(100)"); + assertEquals(BigInteger.valueOf(7), bigNumbersService.getPrimaryNumber(3), + "Для вызова метода: bigNumbersService.getPrimaryNumber(100)"); } } diff --git a/src/test/java/com/epam/izh/rd/online/FileRepositoryTest.java b/src/test/java/com/epam/izh/rd/online/FileRepositoryTest.java index 87dad34f..4edc8c22 100644 --- a/src/test/java/com/epam/izh/rd/online/FileRepositoryTest.java +++ b/src/test/java/com/epam/izh/rd/online/FileRepositoryTest.java @@ -16,7 +16,7 @@ public class FileRepositoryTest { private static final String TEST_DIR_COUNT_PATH = "testDirCountFiles"; - private static final String TEST_DIR_CREATE_PATH = "testDirCreateFile"; + private static final String TEST_DIR_CREATE_PATH = "src/main/resources/testDirCreateFile"; private static final String TEST_FILE_TO_CREATE = "newFile.txt"; private static FileRepository fileRepository; @@ -50,7 +50,6 @@ void testCountFilesInDirectory() { @DisplayName("Тест метода FileRepository.createFile(String path)") void testCreateFile() { fileRepository.createFile(TEST_DIR_CREATE_PATH, TEST_FILE_TO_CREATE); - assertTrue(getFile(TEST_DIR_CREATE_PATH + "/" + TEST_FILE_TO_CREATE).exists()); } @@ -62,11 +61,7 @@ void testReadFileFromResources() { private File getFile(String path) { - ClassLoader classLoader = getClass().getClassLoader(); - URL resource = classLoader.getResource(path); - if (resource != null) { - return new File(resource.getFile()); - } - return new File(""); + File file = new File(path); + return file; } } diff --git a/src/test/java/com/epam/izh/rd/online/RegExpServiceTest.java b/src/test/java/com/epam/izh/rd/online/RegExpServiceTest.java index 0dd35e47..4911eb0e 100644 --- a/src/test/java/com/epam/izh/rd/online/RegExpServiceTest.java +++ b/src/test/java/com/epam/izh/rd/online/RegExpServiceTest.java @@ -21,7 +21,7 @@ static void setup() { @DisplayName("Тест метода RegExpService.maskSensitiveData()") void testMaskSensitiveData() { assertEquals("Вчера вечером со счета номер 4301 **** **** 2140 был совершен перевод на счет 5042 **** ****" + - " 2043 в размере ${payment_amount} рублей. На счету осталось ${balance} рублей", + " 2043 в размере ${payment_amount} рублей. На счету осталось ${balance} рублей", regExpService.maskSensitiveData()); } From 049962c9514315b23dfc2164ffb30cfcdf7e01a9 Mon Sep 17 00:00:00 2001 From: Vlad Date: Wed, 23 Sep 2020 21:39:50 +0400 Subject: [PATCH 2/3] Fix patch FileRepository --- .../repository/SimpleFileRepository.java | 28 ++++++++++--------- .../rd/online/service/SieveEratosthenes.java | 2 +- .../rd/online/service/SimpleDateService.java | 3 -- .../online/service/SimpleRegExpService.java | 4 --- .../izh/rd/online/FileRepositoryTest.java | 13 ++++++--- 5 files changed, 25 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/epam/izh/rd/online/repository/SimpleFileRepository.java b/src/main/java/com/epam/izh/rd/online/repository/SimpleFileRepository.java index 2a747448..5cb30ae5 100644 --- a/src/main/java/com/epam/izh/rd/online/repository/SimpleFileRepository.java +++ b/src/main/java/com/epam/izh/rd/online/repository/SimpleFileRepository.java @@ -4,6 +4,7 @@ import java.io.File; import java.io.FileReader; import java.io.IOException; +import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -19,11 +20,12 @@ public class SimpleFileRepository implements FileRepository { */ @Override public long countFilesInDirectory(String path) { - if (path.length() < "src/main/resources/".length()) { - path = "src/main/resources/" + path; - } - File file = new File(path); + if (!(file.isDirectory() || file.isFile())) + { + URL url = getClass().getResource("/" + path); + file = new File(url.getPath()); + } File[] directory = file.listFiles(); long count = 0; @@ -49,12 +51,15 @@ public long countFilesInDirectory(String path) { @Override public long countDirsInDirectory(String path) { long count = 0; - if (path.length() < "src/main/resources/".length()) { - path = "src/main/resources/" + path; + + File file = new File(path); + if (!(file.isDirectory() || file.isFile())) + { + URL url = getClass().getResource("/" + path); + file = new File(url.getPath()); count++; } - File file = new File(path); File[] directory = file.listFiles(); @@ -104,16 +109,13 @@ public void copyTXTFiles(String from, String to) { */ @Override public boolean createFile(String path, String name) { - if (path.length() < "src/main/resources/".length()) { - path = "src/main/resources/" + path; - } - - File folder = new File(path); + URL url = getClass().getResource("/"); + File folder = new File(url.getPath() + "/" + path); if (!folder.exists()) { folder.mkdir(); } - File file = new File(path + "/" + name); + File file = new File(folder.getPath() + "/" + name); try { return file.createNewFile(); } catch (IOException e) { diff --git a/src/main/java/com/epam/izh/rd/online/service/SieveEratosthenes.java b/src/main/java/com/epam/izh/rd/online/service/SieveEratosthenes.java index b8d6f9a1..b8fdd5d5 100644 --- a/src/main/java/com/epam/izh/rd/online/service/SieveEratosthenes.java +++ b/src/main/java/com/epam/izh/rd/online/service/SieveEratosthenes.java @@ -24,7 +24,7 @@ private static class PrimePair { primes.add(new PrimePair(new BigInteger("3"), new BigInteger("3"))); } - public BigInteger fillNPrimes(int n) { + BigInteger fillNPrimes(int n) { if (n >= 0 && n <= 1) { return primes.get(n).prime; } diff --git a/src/main/java/com/epam/izh/rd/online/service/SimpleDateService.java b/src/main/java/com/epam/izh/rd/online/service/SimpleDateService.java index 85eefc5e..a9094b47 100644 --- a/src/main/java/com/epam/izh/rd/online/service/SimpleDateService.java +++ b/src/main/java/com/epam/izh/rd/online/service/SimpleDateService.java @@ -1,11 +1,8 @@ package com.epam.izh.rd.online.service; -import java.text.ParseException; -import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; -import java.util.Calendar; import java.util.GregorianCalendar; public class SimpleDateService implements DateService { diff --git a/src/main/java/com/epam/izh/rd/online/service/SimpleRegExpService.java b/src/main/java/com/epam/izh/rd/online/service/SimpleRegExpService.java index 0c59c5df..d2011f3b 100644 --- a/src/main/java/com/epam/izh/rd/online/service/SimpleRegExpService.java +++ b/src/main/java/com/epam/izh/rd/online/service/SimpleRegExpService.java @@ -1,10 +1,6 @@ package com.epam.izh.rd.online.service; import com.epam.izh.rd.online.repository.SimpleFileRepository; -import com.sun.xml.internal.ws.commons.xmlutil.Converter; -import sun.plugin2.message.Conversation; - -import java.io.*; import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/src/test/java/com/epam/izh/rd/online/FileRepositoryTest.java b/src/test/java/com/epam/izh/rd/online/FileRepositoryTest.java index 4edc8c22..4bdfe0b2 100644 --- a/src/test/java/com/epam/izh/rd/online/FileRepositoryTest.java +++ b/src/test/java/com/epam/izh/rd/online/FileRepositoryTest.java @@ -16,7 +16,7 @@ public class FileRepositoryTest { private static final String TEST_DIR_COUNT_PATH = "testDirCountFiles"; - private static final String TEST_DIR_CREATE_PATH = "src/main/resources/testDirCreateFile"; + private static final String TEST_DIR_CREATE_PATH = "testDirCreateFile"; private static final String TEST_FILE_TO_CREATE = "newFile.txt"; private static FileRepository fileRepository; @@ -50,6 +50,7 @@ void testCountFilesInDirectory() { @DisplayName("Тест метода FileRepository.createFile(String path)") void testCreateFile() { fileRepository.createFile(TEST_DIR_CREATE_PATH, TEST_FILE_TO_CREATE); + assertTrue(getFile(TEST_DIR_CREATE_PATH + "/" + TEST_FILE_TO_CREATE).exists()); } @@ -61,7 +62,11 @@ void testReadFileFromResources() { private File getFile(String path) { - File file = new File(path); - return file; + ClassLoader classLoader = getClass().getClassLoader(); + URL resource = classLoader.getResource(path); + if (resource != null) { + return new File(resource.getFile()); + } + return new File(""); } -} +} \ No newline at end of file From 8ec4501ed3f5de9a27d7e4b896da4c096e7e947d Mon Sep 17 00:00:00 2001 From: Vlad Date: Mon, 26 Oct 2020 03:08:57 +0400 Subject: [PATCH 3/3] Fix code, unit tests passed --- .../repository/SimpleFileRepository.java | 31 ++++++++----------- .../rd/online/service/SimpleDateService.java | 2 +- 2 files changed, 14 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/epam/izh/rd/online/repository/SimpleFileRepository.java b/src/main/java/com/epam/izh/rd/online/repository/SimpleFileRepository.java index 5cb30ae5..3896039e 100644 --- a/src/main/java/com/epam/izh/rd/online/repository/SimpleFileRepository.java +++ b/src/main/java/com/epam/izh/rd/online/repository/SimpleFileRepository.java @@ -82,24 +82,17 @@ public long countDirsInDirectory(String path) { */ @Override public void copyTXTFiles(String from, String to) { - File folder = new File(from); - - File[] listOfFiles = folder.listFiles(); - - Path destDir = Paths.get(to); - if (listOfFiles != null) { - for (File file : listOfFiles) { - try { - if (file.getAbsolutePath().endsWith(".txt")) { - Files.copy(file.toPath(), destDir.resolve(file.getName()), StandardCopyOption.REPLACE_EXISTING); - } - } catch (IOException ioex) { - ioex.printStackTrace(); - } - } + File file = new File(to); + createFile(file.getParent(), file.getName()); + + try { + Files.copy(Paths.get(from), Paths.get(to), StandardCopyOption.REPLACE_EXISTING); + } catch (IOException ioEx) { + ioEx.printStackTrace(); } } + /** * Метод создает файл на диске с расширением txt * @@ -111,12 +104,14 @@ public void copyTXTFiles(String from, String to) { public boolean createFile(String path, String name) { URL url = getClass().getResource("/"); File folder = new File(url.getPath() + "/" + path); - if (!folder.exists()) { - folder.mkdir(); - } File file = new File(folder.getPath() + "/" + name); + boolean isDirectoryCreated = !new File(path).isDirectory(); + try { + if (isDirectoryCreated) { + Files.createDirectory(Paths.get(path)); + } return file.createNewFile(); } catch (IOException e) { e.printStackTrace(); diff --git a/src/main/java/com/epam/izh/rd/online/service/SimpleDateService.java b/src/main/java/com/epam/izh/rd/online/service/SimpleDateService.java index a9094b47..0d1f670d 100644 --- a/src/main/java/com/epam/izh/rd/online/service/SimpleDateService.java +++ b/src/main/java/com/epam/izh/rd/online/service/SimpleDateService.java @@ -54,10 +54,10 @@ public long getNextLeapYear() { GregorianCalendar calendar = (GregorianCalendar) GregorianCalendar.getInstance(); int leapYear = calendar.get(GregorianCalendar.YEAR); for (; ; ) { + leapYear++; if (calendar.isLeapYear(leapYear)) { return leapYear; } - leapYear++; } }