是否添加对UTF-8字符的支持,而不从0写入所有类代码?[Bukkit和Java]

是否添加对UTF-8字符的支持,而不从0写入所有类代码?[Bukkit和Java],java,utf-8,bukkit,Java,Utf 8,Bukkit,我有3个类来处理所有配置。(2类2000行) 我希望添加对UTF-8字符的支持,而无需从0编写所有代码/ 我显示了我最小的类(尚未完成,我不想用1400行发送垃圾邮件:) 只有两个变量: package com.gmail.bukkitSmerf.professionalWarns; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; im

我有3个类来处理所有配置。(2类2000行)

我希望添加对UTF-8字符的支持,而无需从0编写所有代码/

我显示了我最小的类(尚未完成,我不想用1400行发送垃圾邮件:) 只有两个变量:

package com.gmail.bukkitSmerf.professionalWarns;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;

import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;

public class LangHandler {
    private static String lWarns_DeletedWarnAddon, lWarns_ExpiredWarnAddon;

    public static String getlWarns_DeletedWarnAddon() {
        return lWarns_DeletedWarnAddon;
    }

    public static String getlWarns_ExpiredWarnAddon() {
        return lWarns_ExpiredWarnAddon;
    }

    public void createConfig(boolean forceConfigUpdate) {
        try {
            String langFileName = "languageEN.yml";
            InputStream input = ProfessionalWarns
                    .getPluginResource_languageEN();
            if (ConfigHandler.getcGeneral_Language().equalsIgnoreCase("PL")) {
                langFileName = "languagePL.yml";
                input = ProfessionalWarns.getPluginResource_languagePL();
            }
            File langFile = new File(ProfessionalWarns.getPluginDataFolder(),
                    langFileName);
            if (!langFile.exists()) {
                langFile.getParentFile().mkdirs();
                ConfigHandler.copy(input, langFile);
            }
            YamlConfiguration lang = new YamlConfiguration();
            FileConfiguration rawLang = YamlConfiguration
                    .loadConfiguration(input);
            lang.load(langFile);

            lWarns_DeletedWarnAddon = lang.getString("Warns.DeletedWarnAddon",
                    rawLang.getString("Warns.DeletedWarnAddon"));

            lWarns_ExpiredWarnAddon = lang.getString("Warns.ExpiredWarnAddon",
                    rawLang.getString("Warns.ExpiredWarnAddon"));

            if (ConfigHandler.iscGeneral_AutoUpdateConfigs()
                    || forceConfigUpdate) {
                FileWriter fw = new FileWriter(langFile);
                PrintWriter pw = new PrintWriter(fw);
                pw.flush();
                pw.write("Warns:\n  DeletedWarnAddon: '"
                        + lWarns_DeletedWarnAddon + "'\n  ExpiredWarnAddon: '"
                        + lWarns_ExpiredWarnAddon + "'");
                pw.close();
            }
        } catch (IOException | InvalidConfigurationException e) {
            e.printStackTrace();
            ProfessionalWarns
                    .logWarning("Error when trying create/write/reload language file!");
        }
    }
}
我不知道如何在这里使用UTF-8

我也不想删除任何功能

如果可以,请给我一些关于该代码的建议:)


//对不起,我的英语不好

根据你的评论,我要责备你使用了
文件编写器

FileWriter fw = new FileWriter(langFile);
FileOutputStream fos = new FileOutputStream("your_file");
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
PrintWriter pw = new PrintWriter(osw);
这取决于安装的默认编码,我敢打赌它不是UTF-8。您可以通过以下方式验证这一点:

System.out.println(Charset.defaultCharset());
无论如何,将UTF-8字符写入文件的正确方法是使用
OutputStreamWriter

FileWriter fw = new FileWriter(langFile);
FileOutputStream fos = new FileOutputStream("your_file");
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
PrintWriter pw = new PrintWriter(osw);

除非这是一次性代码,否则您应该在
finally
块中关闭
文件输出流。

您所说的“添加对UTF-8字符的支持”是什么意思?您的意思是要处理包含UTF-8字符的文件吗?如果你有这样一个文件,现在会发生什么?@parsifal当时我无法测试它。(我没有任何代码,只有config/MySQL和播放器的处理程序)。但是在旧版本(同样的方法)中,我在保存ą、ę和其他符号方面有问题;/我尝试测试它,然后添加第二个代码:),但首先我必须在启动时添加小的测试代码。对不起,我无法测试它。我对代码有问题。。。我导出一个文件时没有任何更改,然后该文件被破坏。。。当我解决这个问题时我会写…:)