我想将某些文件从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();
}


}

最佳答案

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

由于在刷新写入器之前要关闭输出流(文件),因此可能存在未写入的数据,由于输出流已关闭,因此无法再将其写入文件。

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

关于java - 通过Java将ANSI转换为UTF-8:丢失了某些行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26826312/

10-11 15:53