java IO
通过文件的输入输出流可以实现文件的拷贝。
public static void main(String[] args) { try { FileInputStream fis = new FileInputStream("gift.gif"); FileOutputStream fos = new FileOutputStream("newgif.gif"); byte[] b = new byte[50]; try { while (fis.read(b) != -1) { fos.write(b); } fis.close(); fos.close(); System.out.println("done"); } catch (IOException e) { e.printStackTrace(); } } catch (FileNotFoundException e) { e.printStackTrace(); } }
但是如果我们事先并不知道文件的大小的时候,read函数并不能把整个文件全部都读入到byte数组中,这个时候发现read函数,如果文件中并没有更多的数据的时候也就是已经全部读取完毕的时候,该函数返回-1;因此可以利用这个特性放在while中,直到把文件读取完毕之后,再close
带有缓冲的输入输出字节流
input读取数据的时候首先去看的是buffer中的数据,所以通过调整buffer的大小,以及input的大小可以改变文件读取的效率
字符流
当还有剩余的流没有填满整个数组的时候,会造成数据的丢失,可以使用flush操作强制读取所有数据保证文件内容是完整的
直接使用字符流,并没有换行功能,而带缓冲的字符流却可以
bufferedReader 有readLine方法
有缓冲区,先写入缓冲区,当缓冲区满的时候再写入硬盘,保护硬盘以及高效
此外,bufferedReader虽然可以按行读取,但是写入的时候,并没有提供换行符,因此可以使用另外一种流PrintWriter
FileReader比较适合字符流的操作,文档上说如果是字节流建议FileInputStream
和线程创建顺序无关,而是和区块的顺序有关
Seek方法将指针指向读或者写的位置
经常用于多线程的下载和多线程的文件传输