Давайте посмотрим, что на самом деле делает ваш код:
//Assign to bytes the UTF-16 String fileName Encoded in Shift_JIS
//bytes now contains the binary Shift_JIS representation of your String
final byte[] bytes = fileName.getBytes("Shift_JIS");
//Create a new String UTF-16 by interpreting bytes as ISO8859_1
//Takes the Shift_JIS encoded bytes and interprets it as ISO8859_1
new String(bytes,"ISO8859_1");
Строки Java используют UTF-16 для внутреннего представления.Вы не можете указать целевую кодировку при создании строки, так как UTF-16 исправлен, вы должны указать правильную исходную кодировку, которая является «Shift_JIS» для байтового массива.
fileNameX должен отображаться правильно без преобразования.