FileInputStreamでは日本語のファイル名が見つからない

emlファイルからメールをいろいろ加工するようなブツを作っているのですが、日本語が含まれるファイルの場合、問題になる事が判明。

String filePath = "/var/lib/apl/aaa/faile/日本語emlファイル.eml";
MimeMessage msg = new MimeMessage(null, new FileInputStream(filePath)); 

開発環境のWindowsでは特に問題ありませんでしたが、Linux環境で実行するとファイルが見つかりませんでエラーになるんですね。。

こちらの下の方を参考に、nio仕様に変えたら問題は解消しました。環境依存でしょうか、特にJVM引数は必要なかったです。

String filePath = "/var/lib/apl/aaa/faile/日本語emlファイル.eml";
Path file = Paths.get(filePath);
if(file.toFile().exists()){
   MimeMessage msg = new MimeMessage(null, Files.newInputStream(file)); 
}

今の時代、Javaのファイル処理はnioに統一した方がよさそうですね。

カテゴリー: Java