读取二进制文件时BufferedReader崩溃

时间:2019-06-30 09:38:13

标签: java encoding character-encoding bufferedreader fileinputstream

社区,感谢您在以下问题上的帮助。

我一直在编写一个小型Java应用程序,就涉及MIME消息部分的散列而言,它允许我生成没有重复的测试数据。要求是:

  
      
  1. 通过主文件夹位置浏览二进制文件,其中   包含MIME格式的电子邮件。
  2.   
  3. 将文件复制到外出位置
  4.   
  5. 打开文件,通过添加标签来创建唯一文件(通过哈希/重复数据删除)并添加修改内容来修饰内容   内容
  6.   
  7. 将文件添加到zip文件->关闭zip文件
  8.   
  9. 转到下一个bin文件。   根据需要重复。
  10.   

在第3点上,BufferedReader在每个输入文件中都相同的一组特定行上崩溃了(?)。我不能粘贴它,因为它包含敏感数据,但是如果删除它,文件输出就可以了。

我在FileInputStream上尝试了带有UTF-8和US_ASCII的StandardCharsets,但是没有任何乐趣。 UTF-16可以正常工作,但是正则表达式匹配器由于编码而无法找到模式,因此我无法在主题行中添加标签。

能否请您提出任何解决编码(???)问题的方法,但是仍然保留有问题的文本块?下面第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();

}

0 个答案:

没有答案