我想将某些文件从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/