1.勿使用:
- 读文件:
BufferedReader bf=new BufferedReader(new FileReader(File))
因为只能将数据读取到字符数组中
public int read(char cbuf[]) throws IOException { return read(cbuf, 0, cbuf.length); }
- 写文件:
PrintWriter pw=new PrintWriter(fileName);
因为只能写字符数组
public void write(char buf[], int off, int len) { try { synchronized (lock) { ensureOpen(); out.write(buf, off, len); } } catch (InterruptedIOException x) { Thread.currentThread().interrupt(); } catch (IOException x) { trouble = true; } }
因为读取的文件中可能出现特殊编码的字符,不属于可打印字符就会导致读取错误。
2.建议使用文件流读写文件:
try{
FileInputStream fis=new FileInputStream(readFile);
FileOutputStream fos=new FileOutputStream(writeFile);
}catch (FileNotFoundException e) {
e.printStackTrace();
}
byte[] byteArray = new byte[1024];
int byteLength= 0;
try{
while ((byteLength = fis.read(byteArray)) != -1) {
fos.write(byteArray,0,byteLength);
}
} catch (IOException e) {
e.printStackTrace();
}
try {
fis.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
3.文件复制:
try{
FileInputStream fis=new FileInputStream(readFile);
FileOutputStream fos=new FileOutputStream(writeFile);
}catch (FileNotFoundException e) {
e.printStackTrace();
}
try{
Files.copy(fis, fos, StandardCopyOption.REPLACE_EXISTING)
}catch (Exception ex) {
ex.printStackTrace();
}
try{
fis.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
本文讨论了在Java中进行文件操作时避免使用BufferedReader和PrintWriter的原因,推荐使用FileInputStream和FileOutputStream进行字节流读写,以确保处理特殊编码字符时的正确性。同时介绍了使用Files.copy方法进行安全的文件复制,考虑了替换已存在文件的情况。
&spm=1001.2101.3001.5002&articleId=118496184&d=1&t=3&u=d6330a9620cb4da3816a70cfdd90b336)

被折叠的 条评论
为什么被折叠?



