1
mirror of https://github.com/CarmJos/MineSQL.git synced 2024-09-19 20:25:45 +00:00

添加JarResourceUtils 用于复制示例文件。

This commit is contained in:
Carm Jos 2022-02-24 04:39:08 +08:00
parent 74f3328da0
commit 869a5df1fd
6 changed files with 139 additions and 33 deletions

View File

@ -15,6 +15,14 @@
轻松(用)SQL的独立运行库插件支持多种服务端适用于MineCraft全版本。 轻松(用)SQL的独立运行库插件支持多种服务端适用于MineCraft全版本。
## 使用场景
### 对于插件使用者
### 对于插件开发者
### 额外提醒
## 安装 ## 安装
## 配置 ## 配置
@ -56,12 +64,12 @@ databases:
示例配置请见 [示例MySQL数据源Properties](easysql-plugin-core/src/main/resources/db-properties/.example-mysql.properties)。 示例配置请见 [示例MySQL数据源Properties](easysql-plugin-core/src/main/resources/db-properties/.example-mysql.properties)。
Properties 文件的文件名几位数据源的ID允许为英文、数字、下划线、短横线请不要包含中文、其他特殊符号与空格以`.`开头的文件将被忽略。
该功能一般用于专业开发者使用若您不了解该功能请尽量使用config.yml中提供的配置方式简单便捷能够满足大多数需求。 该功能一般用于专业开发者使用若您不了解该功能请尽量使用config.yml中提供的配置方式简单便捷能够满足大多数需求。
更多帮助详见 [BeeCP项目帮助](https://github.com/Chris2018998/BeeCP) 。 更多帮助详见 [BeeCP项目帮助](https://github.com/Chris2018998/BeeCP) 。
## 开发 ## 开发
### 依赖方式 ### 依赖方式

View File

@ -11,7 +11,7 @@ import co.aikar.commands.annotation.*;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
import static cc.carm.plugin.easysql.util.ResourceReadUtil.getVersion; import static cc.carm.plugin.easysql.util.MavenReadUtil.getVersion;
@SuppressWarnings("unused") @SuppressWarnings("unused")

View File

@ -1,5 +1,7 @@
package cc.carm.plugin.easysql.util; package cc.carm.plugin.easysql.util;
import org.jetbrains.annotations.NotNull;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
@ -8,26 +10,34 @@ import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Properties; import java.util.Properties;
public class PropertiesUtil { public class DBPropertiesUtil {
public static Map<String, Properties> readDBProperties(File propertiesFolder) { public static Map<String, Properties> readFromFolder(File propertiesFolder) {
Map<String, Properties> propertiesMap = new HashMap<>(); Map<String, Properties> propertiesMap = new HashMap<>();
if (!propertiesFolder.isDirectory()) return propertiesMap; if (!propertiesFolder.isDirectory()) return propertiesMap;
File[] files = propertiesFolder.listFiles(); File[] files = propertiesFolder.listFiles();
if (files == null || files.length == 0) return propertiesMap; if (files == null || files.length == 0) return propertiesMap;
for (File file : files) { for (File file : files) {
if (file.getName().startsWith(".") || !file.getName().endsWith(".properties")) continue; if (!validateName(file.getName())) continue;
String name = file.getName().substring(0, file.getName().lastIndexOf(".")); String name = file.getName().substring(0, file.getName().lastIndexOf("."));
try (InputStream stream = new FileInputStream(file)) { try (InputStream is = new FileInputStream(file)) {
Properties properties = new Properties(); propertiesMap.put(name, read(is));
properties.load(stream);
propertiesMap.put(name, properties);
} catch (IOException ignored) { } catch (IOException ignored) {
} }
} }
return propertiesMap; return propertiesMap;
} }
public static @NotNull Properties read(InputStream stream) throws IOException {
Properties properties = new Properties();
properties.load(stream);
return properties;
}
public static boolean validateName(String name) {
return !name.contains(" ") && !name.startsWith(".") && name.endsWith(".properties");
}
} }

View File

@ -0,0 +1,105 @@
package cc.carm.plugin.easysql.util;
import org.jetbrains.annotations.Nullable;
import java.io.*;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
@SuppressWarnings("ResultOfMethodCallIgnored")
public class JarResourceUtils {
public static final char JAR_SEPARATOR = '/';
public static @Nullable String[] readResource(@Nullable InputStream resourceStream) {
if (resourceStream == null) return null;
try (Scanner scanner = new Scanner(resourceStream, "UTF-8")) {
List<String> contents = new ArrayList<>();
while (scanner.hasNextLine()) {
contents.add(scanner.nextLine());
}
return contents.toArray(new String[0]);
} catch (Exception e) {
return null;
}
}
public static void copyFolderFromJar(String folderName, File destFolder, CopyOption option)
throws IOException {
copyFolderFromJar(folderName, destFolder, option, null);
}
public static void copyFolderFromJar(String folderName, File destFolder,
CopyOption option, PathTrimmer trimmer) throws IOException {
if (!destFolder.exists())
destFolder.mkdirs();
byte[] buffer = new byte[1024];
File fullPath;
String path = JarResourceUtils.class.getProtectionDomain().getCodeSource().getLocation().getPath();
if (trimmer != null)
path = trimmer.trim(path);
try {
if (!path.startsWith("file"))
path = "file://" + path;
fullPath = new File(new URI(path));
} catch (URISyntaxException e) {
e.printStackTrace();
return;
}
ZipInputStream zis = new ZipInputStream(new FileInputStream(fullPath));
ZipEntry entry;
while ((entry = zis.getNextEntry()) != null) {
if (!entry.getName().startsWith(folderName + JAR_SEPARATOR))
continue;
String fileName = entry.getName();
if (fileName.charAt(fileName.length() - 1) == JAR_SEPARATOR) {
File file = new File(destFolder + File.separator + fileName);
if (file.isFile()) {
file.delete();
}
file.mkdirs();
continue;
}
File file = new File(destFolder + File.separator + fileName);
if (option == CopyOption.COPY_IF_NOT_EXIST && file.exists())
continue;
if (!file.getParentFile().exists())
file.getParentFile().mkdirs();
if (!file.exists())
file.createNewFile();
FileOutputStream fos = new FileOutputStream(file);
int len;
while ((len = zis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
fos.close();
}
zis.closeEntry();
zis.close();
}
public enum CopyOption {
COPY_IF_NOT_EXIST, REPLACE_IF_EXIST
}
@FunctionalInterface
public interface PathTrimmer {
String trim(String original);
}
}

View File

@ -4,26 +4,9 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.io.InputStream; import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties; import java.util.Properties;
import java.util.Scanner;
public class ResourceReadUtil { public class MavenReadUtil {
public static @Nullable String[] readResource(@Nullable InputStream resourceStream) {
if (resourceStream == null) return null;
try (Scanner scanner = new Scanner(resourceStream, "UTF-8")) {
List<String> contents = new ArrayList<>();
while (scanner.hasNextLine()) {
contents.add(scanner.nextLine());
}
return contents.toArray(new String[0]);
} catch (Exception e) {
return null;
}
}
public static String getMavenPropertiesPath(@NotNull String groupID, @NotNull String artifactID) { public static String getMavenPropertiesPath(@NotNull String groupID, @NotNull String artifactID) {
return String.format("/META-INF/maven/%s/%s/pom.properties", groupID, artifactID); return String.format("/META-INF/maven/%s/%s/pom.properties", groupID, artifactID);

View File

@ -4,8 +4,8 @@ import cc.carm.lib.easyplugin.EasyPlugin;
import cc.carm.lib.easyplugin.i18n.EasyPluginMessageProvider; import cc.carm.lib.easyplugin.i18n.EasyPluginMessageProvider;
import cc.carm.lib.easysql.api.SQLManager; import cc.carm.lib.easysql.api.SQLManager;
import cc.carm.plugin.easysql.api.DBConfiguration; import cc.carm.plugin.easysql.api.DBConfiguration;
import cc.carm.plugin.easysql.util.PropertiesUtil; import cc.carm.plugin.easysql.util.JarResourceUtils;
import cc.carm.plugin.easysql.util.ResourceReadUtil; import cc.carm.plugin.easysql.util.DBPropertiesUtil;
import cn.beecp.BeeDataSource; import cn.beecp.BeeDataSource;
import co.aikar.commands.PaperCommandManager; import co.aikar.commands.PaperCommandManager;
import org.bstats.bukkit.Metrics; import org.bstats.bukkit.Metrics;
@ -111,12 +111,12 @@ public class EasySQLBukkit extends EasyPlugin implements EasySQLPluginPlatform {
if (!getConfiguration().isPropertiesEnabled()) return new HashMap<>(); if (!getConfiguration().isPropertiesEnabled()) return new HashMap<>();
String propertiesFolder = getConfiguration().getPropertiesFolder(); String propertiesFolder = getConfiguration().getPropertiesFolder();
if (propertiesFolder == null || propertiesFolder.length() == 0) return new HashMap<>(); if (propertiesFolder == null || propertiesFolder.length() == 0) return new HashMap<>();
else return PropertiesUtil.readDBProperties(new File(getDataFolder(), propertiesFolder)); else return DBPropertiesUtil.readFromFolder(new File(getDataFolder(), propertiesFolder));
} }
@Override @Override
public void outputInfo() { public void outputInfo() {
Optional.ofNullable(ResourceReadUtil.readResource(this.getResource("PLUGIN_INFO"))).ifPresent(this::log); Optional.ofNullable(JarResourceUtils.readResource(this.getResource("PLUGIN_INFO"))).ifPresent(this::log);
} }
public static EasySQLBukkit getInstance() { public static EasySQLBukkit getInstance() {