我想将一些文件从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();
}
}
答案 0 :(得分:3)
在将输出流包装到writer中并写入writer时,writer可以在将数据实际转发到输出流之前对其进行缓存。
由于您在刷新写入程序之前关闭了输出流(文件),因此可能会有未写入的数据,因为输出流已关闭,所以无法再写入该文件。
关闭编写器output
,而不是关闭FileOutputStream writer
,将写入器的内容刷新到文件,同时关闭编写器本身和包装的FileOutputStream;