- Сообщения
- 573
- Решения
- 27
Я, аки не самый лучший кодер, набросал недавно весьма рабочее, но относительно костыльное решение.
Недавно я понял, что не понимаю что я наделал, так как код просто не работает.
Даже если size больше 0 (что можно проверить с помощью дебага или банального логгера), значения просто не сохраняются и файл остается пустым.
Я знаю что это корявое, кривое, не очень красивое решение, что можно было бы переделать архитектуру и пользоваться мощью try-with-resources и другими способами сохранения данных, но мне не до этого. Файл кстати создается, иначе я бы просто не дошел до этого момента)
Недавно я понял, что не понимаю что я наделал, так как код просто не работает.
Java:
import java.io.*;
import java.time.Instant;
public class AllowlistFile {
private final String PATH;
public AllowlistFile(String PATH) throws IOException {
this.PATH = PATH;
File file = new File(PATH);
if (!file.exists())
file.createNewFile();
}
public void save(BufferedWriter writer) throws IOException {
int size = AllowedPlayersManager.getCount();
if (size == 0)
return;
String[] names = AllowedPlayersManager.getNames().toArray(new String[size]);
Long[] times = AllowedPlayersManager.getTime().toArray(new Long[size]);
for(int i = 0; i < size; i++) {
writer.write(new StringBuilder(names[i]).append(";").append(times[i]).append("\n").toString());
}
}
public void load(BufferedReader reader) throws IOException {
String line = reader.readLine();
while (line != null) {
String[] info = line.split(";");
if (info.length == 2 && info[0] != null && info[1] != null) {
long time = Long.parseLong(info[1]);
if (time > Instant.now().getEpochSecond())
AllowedPlayersManager.addPlayer(info[0], time);
}
line = reader.readLine();
}
}
public String getPath() {
return PATH;
}
}
Даже если size больше 0 (что можно проверить с помощью дебага или банального логгера), значения просто не сохраняются и файл остается пустым.
Java:
//где-то в onEnable
BufferedReader reader = null;
try {
allowlistFile = new AllowlistFile(getDataFolder() + File.separator + "allowlist");
PATH = allowlistFile.getPath();
reader = new BufferedReader(new FileReader(path));
allowlistFile.load(reader);
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
// в onDisable
try {
BufferedWriter writer = new BufferedWriter(new FileWriter(PATH));
allowlistFile.save(writer);
getLogger().info("All players saved!");
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
Я знаю что это корявое, кривое, не очень красивое решение, что можно было бы переделать архитектуру и пользоваться мощью try-with-resources и другими способами сохранения данных, но мне не до этого. Файл кстати создается, иначе я бы просто не дошел до этого момента)