java 读文件,写文件,复制文件(使用文件输入输出流)

本文讨论了在Java中进行文件操作时避免使用BufferedReader和PrintWriter的原因,推荐使用FileInputStream和FileOutputStream进行字节流读写,以确保处理特殊编码字符时的正确性。同时介绍了使用Files.copy方法进行安全的文件复制,考虑了替换已存在文件的情况。

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();
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值