天天看点

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

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