JAVA学习——IO流拷贝文件夹及其内容

IO流分两种:字节流和字符流,字节流可以处理所有数据,包括图片音频视频传统文本等,字符流是专门用来处理文字的流,自然能够使用字符流的地方一定可以使用字节流,反过来不一定。
又可分为处理流和节点流:节点流是基础,处理流是在节点流的基础上进行操作。
最近学习了File类、InputStream类、OutputStream类、Reader类、Writer类、FileInputStream类、FileOutputStream类、FileReader类、FileWriter类、以及对应的处理流缓冲流,包括BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter,只有其他的ArrayByteInputStream等等几个流只是稍微了解了一下。
总结来说,IO流处理分四步骤:
一、指定源
二、选择流
三、进行流操作
四、记得关闭流
手动写了一个文件夹拷贝的程序,可以拷贝文件夹包括里面所有的资料到另外一个自己指定的文件夹。由于当时写的时候还没学到缓冲流,就直接没加缓冲流,加缓冲流其实是有必要的,毕竟提升性能,操作也就是在节点流的外面套一层缓冲流,其余操作大同小异。

package UseIOCopyDirectoryAndFile;

/**
 * 实现文件夹的拷贝功能
 * 会拷贝文件夹里面所有的东西到另外一个文件夹
 * 也可以直接拷贝文件
 */
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class Demo01 {
	public static void main(String[] args) {
		File src = new File("C:/Users/Administrator/Desktop/文件备份");//指定源路径
		File dist = new File("C:/Users/Administrator/Desktop/copyHomework");//指定目标路径
		Demo01 d1 = new Demo01();
		d1.copyMethod(src, dist);
	}
	public void copyMethod(File src,File dist) {
		if(src!=null&&src.isFile()) {
			copyFile(src,dist);
		}else if(src!=null&&src.isDirectory()) {
			dist.mkdir();//创建文件夹
			for(File file:src.listFiles()) {
				File copyFile = new File(dist.getAbsolutePath()+"\\"+file.getName());		//获取新的目标文件	
//				System.out.println(dist.getAbsolutePath()+"\\"+file.getName());
//				System.out.println(file.getAbsolutePath());
				copyMethod(file,copyFile);//递归调用
			}
		}else {
			System.out.println("源文件不存在!");
		}
	}
	public void copyFile(File src,File dist) {
		InputStream is = null;
		OutputStream os = null;
		try {
			is = new FileInputStream(src);
			os = new FileOutputStream(dist);
			byte[] flush = new byte[1024];//每次拷贝一个Kb的数据
			int len = 0;
			while((len=is.read(flush))!=-1) {//这里len返回的是实际读取到的字节长度,为-1表示读取到文件末尾,注意和无参数的read()区分返回值
				os.write(flush,0,len);
			}
			os.flush();//刷新缓冲区
		}catch(FileNotFoundException e) {
			e.printStackTrace();
		}catch(IOException e) {
			e.printStackTrace();
		}finally {
			//先打开的流后关闭,后打开的流先关闭,而且要分别关闭,防止相互影响
			try {
				if(os!=null) os.close();
			}catch(IOException e) {
				e.printStackTrace();
			}
			try {
				if(is!=null) is.close();
			}catch(IOException e) {
				e.printStackTrace();
			}
		}
	}
}

之前学IO流学了几次,感觉很难,这次感觉学的比较简单,可能是之前积累的东西有了反应。另外再补充一句,之前老觉得编程才是主要的东西,操作系统甚至数据库都没有好好学习,就看重JAVA、C++,简直愚蠢,希望自己早点把东西补回来。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值