Я использую tomcat 5.5.28 в Windows-машине с -Dfile.encoding = UTF-8 в JAVA_OPTS.
У меня проблема с чтением файлов из файловой системы, это мой код:
File directory = new File(directoryPath);
if (directory.exists()) {
File[] fileInDir = directory.listFiles();
for (int i=0; i<fileInDir.length; i++) {
FileInputStream fileInput = new FileInputStream(fileInDir[i]);
...
}
}
Работает нормально, если файл не содержит "странного" символа.
Если в каталоге содержится файл с названием / тильды под его именем, при попытке создать FileInputStream я получаю исключение FileNotFoundException.
Я решаю это, используя расшифрованную строку вместо объекта File, делая это:
String name = new String(fileInDir[i].getName().getBytes(), System.getProperty("file.encoding"));
String parent = new String(fileInDir[i].getParent().getBytes(), System.getProperty("file.encoding"));
Charset systemCharset = Charset.forName(System.getProperty("file.encoding"));
CharsetDecoder systemDecoder = systemCharset.newDecoder();
CharBuffer cbufN = systemDecoder.decode(ByteBuffer.wrap(name.getBytes()));
CharBuffer cbufP = systemDecoder.decode(ByteBuffer.wrap(parent.getBytes()));
String path = cbufP.toString() + File.separator + cbufN.toString();
FileInputStream fileInput = new FileInputStream(path);
Это работает на моем компьютере с Windows, я могу читать файлы вроде (X: \ directory \ zípìç \ ñañaf.txt) без проблем:
Я переместил этот код в другую среду: на машине linux с той же версией tomcat (5.5.28), той же версией виртуальной машины java (1.6.0_20), той же опцией file.encoding (UTF-8), ... и Я снова получаю FileNotFoundException.
Я что-то не так делаю?
Спасибо за любую помощь.
Хуан Аркадио.