处理TomCat文件时,换行命令(\n)无法正常工作。

5

我正在尝试通过读取文本文件中的内容来发送电子邮件。

我要读取的文件

Line 1
Line 2
Line 3

我已经使用JUnit测试了代码,并且我可以收到与文本文件中格式相同的邮件。

使用JUnit输出邮件

Line 1
Line 2
Line 3

但是当部署在Tomcat时,我收到一封邮件,文本内容正常,但是换行没有被识别。

使用Tomcat服务器时的输出邮件

Line 1Line 2Line 3

我正在使用的代码来读取文件内容。

private String readFile(String pathname) throws IOException {
        File file = new File(pathname);
        StringBuilder fileContents = new StringBuilder((int) file.length());
        Scanner scanner = new Scanner(file);
        String lineSeparator = System.getProperty("line.separator");

        try {
            while (scanner.hasNextLine()) {
                fileContents.append(scanner.nextLine() + lineSeparator);
            }
            return fileContents.toString();
        } finally {
            scanner.close();
        }
    }

我已将服务器设置为调试模式,可以看到新行被添加到fileContents.toString()中。

我不确定我漏掉了什么。是否与字符集有关?我不确定....


由于我认为在Tomcat中,lineSeparator的值可能不会如您所期望的那样。 - bNd
1
你是如何读取电子邮件的?可能是你的邮件客户端导致了换行符的问题。 - Perception
1
循环中有任何HTML吗?HTML不关心CRLF,只需要使用< br >。 - philippe lhardy
1
你在哪个系统上运行Tomcat?你的代码将系统无关的分隔符替换为依赖于系统的分隔符,这是服务器端的问题。如果服务端是Linux(lf),客户端是Windows(crlf)...那就 bingo 了。 - philippe lhardy
1
@om39a - 嗯,你正在某个地方阅读这封电子邮件,对吧?为了验证它是由你的程序发送的? - Perception
显示剩余6条评论
2个回答

1

这与Perception和nullix的线索有关,以及邮件如何被读取和HTML。

在我的情况下,我通过从邮件客户端发送“text/html”类型消息到我的应用程序进行测试。因此,当我回复该邮件时,回复邮件也是“text/html”格式。因此省略了使用的/n或其他换行符类型。

因此,在阅读邮件时,我仅读取"text/plain" mime类型。因此,在回复此邮件时,我可以打印新行。


0
也许你读取邮件输出的方式让你认为换行符不存在。例如,如果你将 '\n' 写成换行符,并在 Windows 记事本中打开文件,则似乎看不到换行符。
使用更复杂的文本查看器,如 Notepad++,可以看到空格字符,这可能会有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接