原因是:

        微软在自己的 UTF-8格式的文本文件之前加上了 EF BB BF三个字节 , windows上面的 notepad等程序就是根据这三个字节来确定一个文本文件是 ASCII的还是 UTF-8 , 然而这个只是微软暗自作的标记 , 其它平台上并没有对UTF-8文本文件做个这样的标记。

引用:http://blog.csdn.net/dingxy/article/details/4465600

解决办法是 

    在文件流的开始输入new byte[]{(byte)0xEF,(byte)0xBB,(byte)0xBF};


使用方式,如下:

    FileOutputStream fos = new FileOutputStream(filePath);

    fos.write(new byte[]{(byte)0xEF,(byte)0xBB,(byte)0xBF});

    BufferedWriter bfWriter = new BufferedWriter(new OutputStreamWriter(fos,));

    bfWriter.write(...);    //...是其它信息

    bfWriter.flush();

    bfWriter.close();