Сообщество, я был бы признателен за вашу помощь в следующем вопросе.
Я писал небольшое Java-приложение, которое позволяло бы мне создавать тестовые данные без дубликатов в том, что касается хеширования частей сообщений MIME. Требования:
- Цикл по местоположению главной папки с двоичными файлами, которые
содержать электронные письма в формате MIME.
- скопировать файл в исходящее местоположение
- открыть файл, настроить содержимое, добавив тег для создания уникального файла (который пройдет хэширование / дедупликацию) и записать измененный
содержание
- добавить файл в zip-файл -> закрыть zip-файл
- перейти к следующему бин-файлу.
Повторите при необходимости.
Я застрял в точке 3 с BufferedReader
сбой (?) На определенном наборе строк, которые одинаковы в каждом входном файле. Я не могу вставить его, так как он содержит конфиденциальные данные, но если я удаляю его, файл получает вывод просто отлично.
Я попробовал StandardCharsets с UTF-8 и US_ASCII на FileInputStream, но без радости. UTF-16 работает нормально, но тогда сопоставителю Regex не удается найти шаблон из-за кодировки, и я не могу добавить тег в строку темы.
Не могли бы вы посоветовать какой-либо способ исправить / обойти проблему с кодировкой (???), но при этом сохранить проблемный блок текста? Код для пункта 3 ниже:
public void createAUniqueEmailMsg(File fileIn, int i) throws IOException {
final String TAG = "_TEST_";
List<String> contents = new ArrayList<>();
// Patterns for MimeMessage parts
final String patternAtt = "Content-Disposition: attachment";
final Pattern attachmentPattern = Pattern.compile(patternAtt);
final String patternTo = "To: ";
final Pattern toPattern = Pattern.compile(patternTo);
final String patternFrom = "From: ";
final Pattern fromPattern = Pattern.compile(patternFrom);
final String patternMsgId = "Message-ID: ";
final Pattern msgIdPattern = Pattern.compile(patternMsgId);
final String patternSubject = "Subject: ";
final Pattern subjectPattern = Pattern.compile(patternSubject);
final String patternContents = "Content-Transfer-Encoding: ";
final Pattern contentsPattern = Pattern.compile(patternContents);
Matcher matcher = subjectPattern.matcher("\\D");
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(fileIn)));
try {
String line;
while ((line = br.readLine()) != null) {
matcher.reset(line);
if (matcher.find() == true) {
String oldLine = line;
String newLine = line + TAG + i;
// Replace contents of the line with line + tag + iteration
line.replaceAll(oldLine, newLine);
contents.add(newLine);
} else {
// Add all read lines to contents.
contents.add(line);
}
}
} catch (Exception e) {
e.getMessage();
}
br.close();
logger.error("Debugging: Contents:" + contents);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileIn)));
for (String s : contents) {
bw.write(s);
bw.newLine();
}
logger.error("Contents for file: " + fileIn.getName() + " have been written.");
bw.flush();
bw.close();
}