我正在使用马里兰大学的 FindBug 程序,它给了我这个错误。
我已经在许多平台上测试了我的代码并且它可以工作,那么为什么这个代码是不好的做法,我可以做些什么来改进它?
它告诉您未指定编码(如何将字符串转换为字节)。
如果您在土耳其编写一个文本文件,然后在乌兹别克斯坦加载它,那么您可能会得到不同的结果。相反(例如)您可以通过使用指定的编码自己将字符串转换为字节来直接指定编码(参见String.getBytes的示例)。
您需要指定字符集
您可以使用OutputStreamWriter
fileWriter = new OutputStreamWriter(new FileOutputStream(file),charset);
请参阅FileWriter文档:“此类的构造函数假定默认字符编码和默认字节缓冲区大小是可接受的。要自己指定这些值,请在 FileOutputStream 上构造一个 OutputStreamWriter。”
依赖默认字符编码可能被认为是不好的做法。
使用FileOutputStream
, 而不是FileWriter
. 可以使用 包装OutputStreamWriter
,它允许您在构造函数中传递编码。
否则,正如 Jeff 所说,数据将无法正确加载。
OutputStream fout = new FileOutputStream("test.txt");
OutputStream bout = new BufferedOutputStream(fout);
OutputStreamWriter out = new OutputStreamWriter(bout, "UTF-8");