Проблема в том, что вы используете BufferedReader
и BufferedWriter
. Они предназначены для использования с символьными потоками. Он преобразует последовательность байтов, которую вы прочитали из вложения, в кодовые точки символов Unicode (тип char
) с использованием кодировки платформы по умолчанию и наоборот. В процессе кодирования или декодирования не отображаемые символы могут быть заменены или исключены из потока.
Вы должны использовать обычный InputStream
для чтения вложения и FileOutputStream
для записи в файл:
InputStream stream = bodyPart.getInputStream();
if (Part.ATTACHMENT.equals(bodyPart.getDisposition())) {
FileOutputStream fstream = new FileOutputStream("AAA001.txt.pgp");
byte[] buffer = new byte[1024];
int len;
while ((len = stream.read(buffer)) != -1) {
fstream.write(buffer, 0, len);
}
fstream.close();
}
stream.close();
Существуют и другие способы копирования содержимого InputStream
в OutputStream
, см. этот вопрос и ответы .