У меня просто была такая же проблема.Фактическая причина этого в том, что когда ваш код запускается в среде NetBeans, NetBeans автоматически устанавливает свойства системы.
Вы можете видеть, что при запуске кода с помощью NetBeans приведенный ниже код, вероятно, выводит «UTF-8».Но когда вы запустите его с помощью cmd, вы обязательно увидите «cp1256».
System.getProperty("file.encoding");
Вы должны заметить, что при использовании setProperty изменится вывод функции getProperty, это не будет иметь никакого эффекта.на входах / выходах.(поскольку все они установлены до вызова основной функции.)
Имея в виду этот фон, когда вы хотите читать из файлов и записывать в них, лучше использовать коды ниже:
File f = new File(sourcePath);
Для чтения:
InputStreamReader isr = new InputStreamReader(
new FileInputStream(f), Charset.forName("UTF-8"));
и для записи (я не проверял это):
OutputStreamWriter osw = new OutputStreamWriter(
new FileOutputStream(f), Charset.forName("UTF-8"));
основное отличие состоит в том, что эти классы получают требуемый Charset в своих конструкторах,но такие классы, как FileWrite и PrintWrite - нет.Я надеюсь, что это работает для вас.