ANSI到UTF-8到Java:有些行丢失了

时间:2014-11-09 08:10:17

标签: java utf-8

我想将一些文件从ANSI(阿拉伯语)转换为UTF-8。它工作但是在创建新文件之后,它缺少一些行(最后)。有什么想法吗?

这是代码:

public class CustomFileConverter {

private static final char BYTE_ORDER_MARK = '\uFEFF';

public void createFile(String inputFile, String outputFile) throws IOException{
    FileInputStream input = new FileInputStream(inputFile);

    InputStreamReader inputStreamReader = new InputStreamReader(input, "windows-1256"); // Arabic
    char[] data = new char[1024];
    int i = inputStreamReader.read(data);

    if(new File(outputFile).exists()){
       new File(outputFile).delete();
    }
    FileOutputStream output = new FileOutputStream(outputFile,true);
    Writer writer = new OutputStreamWriter(output,"UTF-8");

    String text = "";
    writer.write(BYTE_ORDER_MARK);
    while(i !=-1){
        String str = new String(data,0,i);
        text = text+str;
        i = inputStreamReader.read(data);

    }
    // System.out.print(text); It is printed Completely

    writer.write(text);
    // File lacks some final lines...

    output.close();
    input.close();      
}

}

1 个答案:

答案 0 :(得分:3)

在将输出流包装到writer中并写入writer时,writer可以在将数据实际转发到输出流之前对其进行缓存。

由于您在刷新写入程序之前关闭了输出流(文件),因此可能会有未写入的数据,因为输出流已关闭,所以无法再写入该文件。

关闭编写器output,而不是关闭FileOutputStream writer,将写入器的内容刷新到文件,同时关闭编写器本身和包装的FileOutputStream;