Java中IO操作的小感悟
(文件复制的几种方法)
在有铁锹、车的情况下把一堆沙子运到目的地有几种方法?
答:有如下几种方法: 1、用铁锹铲上沙子走到目的地,一铁锹一铁锹的运输。(小样累不死你不算完) 2、用铁锹把沙子先铲到车子上,然后车子到底有多大? ①车子如果足够装下这堆沙子那最好,直接装车拉走。 ②车子本身不够大不能装下这堆沙子,那就装车到目的地卸车然后回来,如此反复直到车子足够装下剩下的沙子为止。 |
实际上IO操作无非上面所述三种方法。小铁锹法、大卡车法、小车快跑法。
小铁锹法的具体实现:
File fileTarget = new File(targetPath);// 目标文件实例化 InputStream streamIn = new FileInputStream(fileSource);// 输入流,输入对象源文件(锁定沙堆位置) OutputStream streamOut = new FileOutputStream(fileTarget);// 输出流,输出对象目标文件(锁定目的地位置) int tempOneByte = 0;// 声明一个字节的缓存(亮出小铁锹) // (在没把这堆沙子铲完之前,就循环往复的干吧) while ((tempOneByte = streamIn.read()) > -1) {// 逐个字节读取,在输入流没有读到文件结尾时(开始干活,铲沙子) streamOut.write(tempOneByte);// 逐个字节写入(把沙子放到目的地) } |
大卡车法的具体实现:
File fileTarget = new File(targetPath);// 目标文件实例化 byte[] tempContainer = new byte[(int) fileSource.length()];// 新建字节数组缓存源文件内容(找个能一次装下这堆沙子的大卡车来) InputStream streamIn = new FileInputStream(fileSource);// 输入流,输入对象源文件(锁定沙堆位置) streamIn.read(tempContainer);// 将源文件以输入流方式读入到字节数组(将沙子直接装车) OutputStream streamOut = new FileOutputStream(fileTarget);// 输出流,输出对象目标文件(锁定目的地位置) streamOut.write(tempContainer);// 将字节数组写入到目标文件(到地方了可以卸车了) |
小车快跑法的实现:
File fileTarget = new File(targetPath);// 目标文件实例化 InputStream streamIn = new FileInputStream(fileSource);// 输入流,输入对象源文件(锁定沙堆位置) OutputStream streamOut = new FileOutputStream(fileTarget);// 输出流,输出对象目标文件(锁定目的地位置) byte[] buff = new byte[1024];// 声明1024字节的缓存(小车,这个车就只能装这么多东西了) //(在没把这堆沙子铲完之前,就循环往复的干吧) for (int i = 0; (i = streamIn.read(buff)) > 0;) {// 逐个缓存读取,再输入流到达结尾时i=-1不满足循环条件(开始装车了) streamOut.write(buff);// 逐个缓存写入(到地方了,卸车) } |
*在大卡车法和小车快跑法中都没有看到小铁锹的身影。估计是语言的智能化简化了小铁锹这个过程吧。
以上是最近向跳河学习java.io时的一点小感悟和跟我一样的菜鸟一同分享。