Я не думаю, что ваш пример верен, потому что вы передаете ZipOutputStream
непосредственно CsvWriter
.Предполагая, что вы используете OpenCSV, конструктору CsvWriter
требуется Writer
, а не OutputStream
.
. В Java потоки ввода-вывода представляют собой либо байтовые потоки, которые являются необработанными данными;или символьные потоки, которые состоят из символов Unicode.Чтобы преобразовать один в другой, вы должны предоставить кодировку символов, которая сообщает, как преобразовывать символы в / из байтов.(Если вы не предоставите один, то Java будет использовать кодировку символов по умолчанию - которая зависит от платформы, но обычно это UTF-8.) InputStream
и OutputStream
являются байтовыми потоками, тогда как соответствующие символьные потоки называются Reader
и Writer
.
У вас есть ZipOutputStream
, который является потоком байтов.Конструктор OpenCSV CsvWriter
требует Writer
, символьный поток, который имеет смысл, потому что CSV является текстовым форматом.(Я полагаю, что это будет справедливо и для других реализаций CsvWriter
.) Вам следует заключить ZipOutputStream
в экземпляр OutputStreamWriter
, который преобразует символы CSV в байты.Вы можете указать кодировку символов в конструкторе OutputStreamWriter
.