Why can't I parse a javamail attachment using toString?
It seems to me the snippet below should work, but "mp.getBodyPart(1).getContent().toString()" returns
开发者_如何学编程com.sun.mail.util.BASE64DecoderStream@44b07df8
instead of the contents of the attachment.
public class GMailParser {
public String getParsedMessage(Message message) throws Exception {
try {
Multipart mp = (Multipart) message.getContent();
String s = mp.getBodyPart(1).getContent().toString();
if (s.contains("pattern 1")) {
return "return 1";
} else if (s.contains("pattern 2")) {
return "return 2";
}
...
It simply means that the BASE64DecoderStream class does not provide a custom toString definition. The default toString definition is to display the class name + '@' + Hash Code, which is what you see.
To get the "content" of the Stream you need to use the read() method.
This parses BASE64DecoderStream attachments exactly as needed.
private String getParsedAttachment(BodyPart bp) throws Exception {
InputStream is = null;
ByteArrayOutputStream os = null;
try {
is = bp.getInputStream();
os = new ByteArrayOutputStream(256);
int c = 0;
while ((c = is.read()) != -1) {
os.write(c);
}
String s = os.toString();
if (s.contains("pattern 1")) {
return "return 1";
} else if (s.contains("pattern 2")) {
return "return 2";
}
...
精彩评论