Can you fix the license header on the two new files to match the current sources? Thanks.
Also, we don't normally include @ author tags.
Maybe use a HashSet instead of an array for RESERVED, so it's not an O(N) lookup per character? Also, since you check for < ' ', you shouldn't need any entries < 0x20?
Sometimes (rarely?), attachment filenames have their own sub-directories, and the code today will happily .mkdirs those subdirectories, but it looks like with this patch we now replace / and \ with their hex equivalents, instead? I think that's OK...