From 7bcffce329a04725b323d07e41263c9caf7fc126 Mon Sep 17 00:00:00 2001 From: fazziclay Date: Thu, 4 Aug 2022 16:52:37 +0300 Subject: [PATCH] 1.0 --- .idea/.gitignore | 3 + .idea/artifacts/JavaNeoUtil_jar.xml | 8 + .idea/misc.xml | 6 + .idea/modules.xml | 8 + JavaNeoUtil.iml | 11 + LICENSE | 4 +- .../JavaNeoUtil_jar/JavaNeoUtil-1.0.jar | Bin 0 -> 6076 bytes .../JavaNeoUtil-1.0-sources-javadoc.jar | Bin 0 -> 6716 bytes .../JavaNeoUtil/META-INF/MANIFEST.MF | 3 + .../ArrayUtil$SortStringConsumer.class | Bin 0 -> 406 bytes .../ru/fazziclay/javaneoutil/ArrayUtil.class | Bin 0 -> 1797 bytes .../ru/fazziclay/javaneoutil/FileUtil.class | Bin 0 -> 6294 bytes .../ru/fazziclay/javaneoutil/Filter.class | Bin 0 -> 239 bytes .../fazziclay/javaneoutil/JavaNeoUtil.class | Bin 0 -> 425 bytes .../ru/fazziclay/javaneoutil/NonNull.class | Bin 0 -> 159 bytes src/META-INF/MANIFEST.MF | 3 + src/ru/fazziclay/javaneoutil/ArrayUtil.java | 70 ++++ src/ru/fazziclay/javaneoutil/FileUtil.java | 307 ++++++++++++++++++ src/ru/fazziclay/javaneoutil/Filter.java | 29 ++ src/ru/fazziclay/javaneoutil/JavaNeoUtil.java | 6 + src/ru/fazziclay/javaneoutil/NonNull.java | 4 + 21 files changed, 460 insertions(+), 2 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/artifacts/JavaNeoUtil_jar.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 JavaNeoUtil.iml create mode 100644 out/artifacts/JavaNeoUtil_jar/JavaNeoUtil-1.0.jar create mode 100644 out/artifacts/JavaNeoUtil_jar/sources-javadoc/JavaNeoUtil-1.0-sources-javadoc.jar create mode 100644 out/production/JavaNeoUtil/META-INF/MANIFEST.MF create mode 100644 out/production/JavaNeoUtil/ru/fazziclay/javaneoutil/ArrayUtil$SortStringConsumer.class create mode 100644 out/production/JavaNeoUtil/ru/fazziclay/javaneoutil/ArrayUtil.class create mode 100644 out/production/JavaNeoUtil/ru/fazziclay/javaneoutil/FileUtil.class create mode 100644 out/production/JavaNeoUtil/ru/fazziclay/javaneoutil/Filter.class create mode 100644 out/production/JavaNeoUtil/ru/fazziclay/javaneoutil/JavaNeoUtil.class create mode 100644 out/production/JavaNeoUtil/ru/fazziclay/javaneoutil/NonNull.class create mode 100644 src/META-INF/MANIFEST.MF create mode 100755 src/ru/fazziclay/javaneoutil/ArrayUtil.java create mode 100755 src/ru/fazziclay/javaneoutil/FileUtil.java create mode 100755 src/ru/fazziclay/javaneoutil/Filter.java create mode 100644 src/ru/fazziclay/javaneoutil/JavaNeoUtil.java create mode 100644 src/ru/fazziclay/javaneoutil/NonNull.java diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/artifacts/JavaNeoUtil_jar.xml b/.idea/artifacts/JavaNeoUtil_jar.xml new file mode 100644 index 0000000..454cf3a --- /dev/null +++ b/.idea/artifacts/JavaNeoUtil_jar.xml @@ -0,0 +1,8 @@ + + + $PROJECT_DIR$/out/artifacts/JavaNeoUtil_jar + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..7d862fb --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..5d5c1a0 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/JavaNeoUtil.iml b/JavaNeoUtil.iml new file mode 100644 index 0000000..c90834f --- /dev/null +++ b/JavaNeoUtil.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/LICENSE b/LICENSE index 0cb8ff6..30d9c8d 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2022 Mironov Stanislav +Copyright (c) 2022 Mironov Stanislav (FazziCLAY) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +SOFTWARE. \ No newline at end of file diff --git a/out/artifacts/JavaNeoUtil_jar/JavaNeoUtil-1.0.jar b/out/artifacts/JavaNeoUtil_jar/JavaNeoUtil-1.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..177d9894997b797642ca7d455ecd0789e7024df0 GIT binary patch literal 6076 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 X86)KH@F)Bp_4oweBYgiP|L*!9=;YtC literal 0 HcmV?d00001 diff --git a/out/production/JavaNeoUtil/ru/fazziclay/javaneoutil/Filter.class b/out/production/JavaNeoUtil/ru/fazziclay/javaneoutil/Filter.class new file mode 100644 index 0000000000000000000000000000000000000000..1b4b1176eaff87604377ef7c32bd62510b756b5f GIT binary patch literal 239 zcmX^0Z`VEs1_pBm9(D#Ub_Q-n2DZfHMvEH5>`v?Mb}AEJzrK>*!JY>W(y3`{^TFfcH(FfuSRumJh2 SKpqnV8xTWS>vP4D( zg`!gZw8W~a%;cQJN_~)6UTS`6NoI~dR2?IO07z6nCowNw-#;lUHMxY5K^`HLn3tDd hl30?NpQrB#XR0wWFfuR!F*DFH3_zL%NHQ_70sx}yE1v)W literal 0 HcmV?d00001 diff --git a/src/META-INF/MANIFEST.MF b/src/META-INF/MANIFEST.MF new file mode 100644 index 0000000..da6da34 --- /dev/null +++ b/src/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Created-By: FazziCLAY + diff --git a/src/ru/fazziclay/javaneoutil/ArrayUtil.java b/src/ru/fazziclay/javaneoutil/ArrayUtil.java new file mode 100755 index 0000000..db6e61e --- /dev/null +++ b/src/ru/fazziclay/javaneoutil/ArrayUtil.java @@ -0,0 +1,70 @@ +package ru.fazziclay.javaneoutil; + +/** +MIT License + +Copyright (c) 2022 Mironov Stanislav (FazziCLAY) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +**/ + +/** + * Набот утилит для сортировки + * @author FazziCLAY ( https://fazziclay.github.io ) + * **/ +public class ArrayUtil { + /** + * Перерасположить(сортировать) массив list по тексту элемента, тест достаётся с помощью {@link SortStringConsumer} + * **/ + public static void sortByName(T[] list, SortStringConsumer consumer) { + int n = list.length; + T temp; + + for (int i = 0; i < n; i++) { + for (int j = i + 1; j < n; j++) { + T oI = list[i]; + T oJ = list[j]; + + String s1 = consumer.get(oI); + String s2 = consumer.get(oJ); + if (s1 == null) s1 = ""; + if (s2 == null) s2 = ""; + + if (s1.compareTo(s2) > 0) { + temp = list[i]; + list[i] = list[j]; + list[j] = temp; + } + } + } + } + + public interface SortStringConsumer { + String get(T o); + } + + public static void reverse(T[] list) { + for (int i = 0; i < list.length; i++) { + int iRev = list.length - 1 - i; + T temp = list[i]; + list[i] = list[iRev]; + list[iRev] = temp; + } + } +} diff --git a/src/ru/fazziclay/javaneoutil/FileUtil.java b/src/ru/fazziclay/javaneoutil/FileUtil.java new file mode 100755 index 0000000..82873d2 --- /dev/null +++ b/src/ru/fazziclay/javaneoutil/FileUtil.java @@ -0,0 +1,307 @@ +package ru.fazziclay.javaneoutil; + +/** +MIT License + +Copyright (c) 2022 Mironov Stanislav (FazziCLAY) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +**/ + +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; + +/** + * Набор утилит для работы с файлами + * @author FazziCLAY ( https://fazziclay.github.io ) + * **/ +public class FileUtil { + /** + * Исправить путь Windows-Linux + **/ + private static String fixPathSeparator(@NonNull String path) { + return path + .replace("/", File.separator) + .replace("\\", File.separator); + } + + /** + * Получить файл из пути, путь чинится Windows-Linux + **/ + public static File getFile(String path) { + return new File(fixPathSeparator(path)); + } + + /** + *

Example

+ *

Input: "/test/owo/f.json"

+ *

Output: "/test/owo"

+ **/ + public static String getParentDirOfFile(String path) { + path = fixPathSeparator(path); + int lastSep = path.lastIndexOf(File.separator); + if (lastSep > 0) { + return path.substring(0, lastSep) + File.separator; + } + return File.separator; + } + + /** + * @see FileUtil#getParentDirOfFile(String) + **/ + public static File getParentDirOfFile(File file) { + return new File(getParentDirOfFile(fixPathSeparator(file.getAbsolutePath()))); + } + + /** + * @see FileUtil#createDirIfNotExists(File) + **/ + public static void createDirIfNotExists(String path) { + createDirIfNotExists(getFile(path)); + } + + /** + * Создать дирректорию если она не существует + **/ + public static void createDirIfNotExists(File file) { + if (!file.exists()) { + //noinspection ResultOfMethodCallIgnored + file.mkdirs(); + } + } + + /** + * @see FileUtil#getParentDirOfFile(File) + **/ + public static void createNewIfNotExist(@NonNull String path) { + createNewIfNotExist(getFile(path)); + } + + /** + * Создать файл, если он существует то ничего не делаем + **/ + public static void createNewIfNotExist(@NonNull File file) { + try { + if (!file.exists()) { + createDirIfNotExists(getParentDirOfFile(file)); + + //noinspection ResultOfMethodCallIgnored + file.createNewFile(); + } + } catch (Exception e) { + throw new RuntimeException("Exception while create new file", e); + } + } + + /** + * @see FileUtil#isExist(File) + **/ + public static boolean isExist(@NonNull String path) { + return isExist(getFile(path)); + } + + /** + * Существует ли файл + **/ + public static boolean isExist(@NonNull File file) { + return file.exists(); + } + + /** + * @see FileUtil#getFilesList(File) + **/ + public static File[] getFilesList(@NonNull String dirPath) { + return getFilesList(getFile(dirPath)); + } + + /** + * Список файлов в дирректории + **/ + public static File[] getFilesList(@NonNull File dir) { + if (!isExist(dir) || !dir.isDirectory()) { + return null; + } + return dir.listFiles(); + } + + public static void delete(@NonNull String path) { + delete(getFile(path)); + } + + /** + * Если файл, то удаляет + * Если папка, то удаляет (рекурсивно) + * #RECURSION + **/ + public static void delete(@NonNull File path) { + if (path.isDirectory()) { + File[] children = getFilesList(path); + if (children != null) { + for (File child : children) { + delete(child); + } + } + path.delete(); + + } else if (path.isFile()) { + path.delete(); + } + } + + /** + * @see FileUtil#writeText(File, boolean, String) + **/ + public static void writeText(@NonNull String path, boolean append, String text) { + writeText(getFile(path), append, text); + } + + /** + * Записывает текст в файл, если нету то создаст + **/ + public static void writeText(@NonNull File file, boolean append, String text) { + createNewIfNotExist(file); + try { + final FileWriter fileWriter = new FileWriter(file, append); + fileWriter.write(text); + fileWriter.flush(); + fileWriter.close(); + + } catch (Exception e) { + throw new RuntimeException("Exception while write text to file", e); + } + } + + /** + * @see FileUtil#setText(File, String) + **/ + public static void setText(@NonNull String path, String text) { + setText(getFile(path), text); + } + + /** + * Ставит в файл текст + * + * @see #writeText(File, boolean, String) + **/ + public static void setText(@NonNull File file, String text) { + writeText(file, false, text); + } + + /** + * @see #addText(File, String) + **/ + public static void addText(@NonNull String path, String text) { + addText(getFile(path), text); + } + + /** + * Добавляет в файл текст в конец + * + * @see #writeText(File, boolean, String) + **/ + public static void addText(@NonNull File file, String text) { + writeText(file, true, text); + } + + /** + * @see #getText(File, String) + **/ + public static String getText(@NonNull String path, String defaultValue) { + return getText(getFile(path), defaultValue); + } + + /** + * Получить текст из файла, если файла нету то возвращаем defaultValue + * если файла не существует, то и не создаём его! + * + * @param defaultValue вывод если файла не существует + **/ + public static String getText(@NonNull File file, String defaultValue) { + if (!isExist(file)) { + return defaultValue; + } + + try { + final StringBuilder result = new StringBuilder(); + final FileReader fileReader = new FileReader(file); + + final char[] buff = new char[1024]; + + int i; + while ((i = fileReader.read(buff)) > 0) { + result.append(new String(buff, 0, i)); + } + + fileReader.close(); + return result.toString(); + + } catch (Exception e) { + throw new RuntimeException("Exception while get file text", e); + } + } + + /** + * @see #getText(File) + **/ + public static String getText(String path) { + return getText(getFile(path)); + } + + /** + * if file not exist: return null + * + * @see #getText(String, String) + **/ + public static String getText(File file) { + return getText(file, null); + } + + + // == DEPRECATED == + @Deprecated + public static void write(File file, String content) { + write(file.getAbsolutePath(), content); + } + + @Deprecated + public static void write(String path, String content) { + setText(getFile(path), content); + } + + @Deprecated + public static String read(File file, String defaultValue) { + return read(file.getAbsolutePath(), defaultValue); + } + + @Deprecated + public static String read(String path) { + return read(path, null); + } + + @Deprecated + public static String read(String path, String defaultValue) { + return getText(getFile(path), defaultValue); + } + + @Deprecated + public static void deleteDir(File dir) { + delete(dir); + } +} diff --git a/src/ru/fazziclay/javaneoutil/Filter.java b/src/ru/fazziclay/javaneoutil/Filter.java new file mode 100755 index 0000000..0a272b6 --- /dev/null +++ b/src/ru/fazziclay/javaneoutil/Filter.java @@ -0,0 +1,29 @@ +package ru.fazziclay.javaneoutil; + +/** +MIT License + +Copyright (c) 2022 Mironov Stanislav (FazziCLAY) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +**/ + +public interface Filter { + boolean accept(T entry); +} diff --git a/src/ru/fazziclay/javaneoutil/JavaNeoUtil.java b/src/ru/fazziclay/javaneoutil/JavaNeoUtil.java new file mode 100644 index 0000000..959eaaf --- /dev/null +++ b/src/ru/fazziclay/javaneoutil/JavaNeoUtil.java @@ -0,0 +1,6 @@ +package ru.fazziclay.javaneoutil; + +public class JavaNeoUtil { + public final static String VERSION_NAME = "1.0"; + public final static int VERSION_CODE = 1; +} diff --git a/src/ru/fazziclay/javaneoutil/NonNull.java b/src/ru/fazziclay/javaneoutil/NonNull.java new file mode 100644 index 0000000..0814f9b --- /dev/null +++ b/src/ru/fazziclay/javaneoutil/NonNull.java @@ -0,0 +1,4 @@ +package ru.fazziclay.javaneoutil; + +public @interface NonNull { +}