JavaSE_day40(字节流复制图片,字节流与File实现复制目录到另一个目录下)

1 A.java

 * 1.分别使用字符流和字节流复制图片(底层是二进制文件,如图片 视频 音频等)
 * 
 *         二进制文件只能使用字节流进行复制(使用windows自带记事本打开读不懂的)
 * 
 *         文本文件的复制即可使用字符流,也可以使用字节流
 * 
 * 
 * 2.图解:字符流复制文件的解析

JavaSE_day40(字节流复制图片,字节流与File实现复制目录到另一个目录下)_第1张图片

public class A {
	public static void main(String[] args) throws IOException  {
//		method();  //说明不能用字符流来复制图片
		
		method2();
	}

	private static void method2() throws FileNotFoundException, IOException {
		//创建字节输入流对象--要读的
		FileInputStream fis = new FileInputStream("1.png");
		//创建字节输出流对象--要输出的的
		FileOutputStream fos = new FileOutputStream("file/22.png");  //成功输出,图片也是一模一样
		
		
		//一次读写一个字节数组
		int len;//用于存储读到的字节个数
		byte[] bys = new byte[1024];
		while((len = fis.read(bys)) != -1) {
			fos.write(bys,0,len);
		}
		
		//释放资源
		fos.close();
		fis.close();
	}

	private static void method() throws FileNotFoundException, IOException {
		//创建字符输入流对象
		FileReader fr = new FileReader("1.png");
		//创建字符输出流对象
		FileWriter fw = new FileWriter("file/12.png");
		
		//一次读写一个字符数组
		int len;//用于存储读到的字符个数
		char[] chs = new char[1024];
		while((len = fr.read(chs)) != -1) {   //执行完图片啥都没有
			fw.write(chs,0,len);
			fw.flush();
		}
		
		//释放资源
		fw.close();
		fr.close();
	}
}

 

2 B.java

 * 需求:将指定目录(包含内容)复制到另一个目录中
 * 
 * 源目录        目标目录
 * 
 * 
 * 分析:
 *         1.首先我们要获取源目录下所有的文件和子目录,
 *                 我们可以把源目录封装成一个File对象,
 *                 我们可以调用File类listFiles()方法,
 *                 我们可以获取源目录下所有的文件和子目录所对应的File对象。
 *         2.如果我们获取到的是文件
 *                 先在目标目录中创建该文件所对应的目录,
 *                 进行文件的复制。
 *         3.如果我们获取到的是子目录
 *                 看看子目录下面是否还有其他的文件和更深层次的子目录
 * 

public class B {
	public static void main(String[] args) throws IOException  {
		//源目录src
		File src = new File("file");//  假设:  d:\\myAPI
		//目标目录dest
		File dest = new File("copyfile");//  假设: d:\\a
		System.out.println(src.isDirectory());
		System.out.println(dest.isDirectory());
		copyDir(src,dest);
	}
	
	public static void copyDir(File src,File dest) throws IOException {
		//为了严谨起见,我们首先对源目录和目标目录进行判断,看他们到底是不是目录
		if(src.isDirectory() && dest.isDirectory()) {
			//1.创建新的目录(将源目录放到目标目录下)d:\\a\\myAPI
			File newDir = new File(dest , src.getName());
			if(!newDir.exists()) {
				newDir.mkdir();
				System.out.println("已创建目录:"+newDir);
			}
			
			//2.获取源目录下所有的文件和子目录,获取myAPI目录的所有文件
			File[] files = src.listFiles();
			//遍历数组获取
			for (File file : files) {
				//如果File对象是文件,我们就进行文件的复制
				if(file.isFile()) {
					//创建输入流对象,要读取的是MyAPI下的某个文件
					FileInputStream fis = new FileInputStream(file);
					//创建输出流对象,要输出到的是新目录下,名字一致的File
					FileOutputStream fos = new FileOutputStream(new File(newDir,file.getName()));
					//一次读取一个字节数组
					byte[] bys = new byte[1024];
					int len;
					while((len = fis.read(bys)) != -1) {
						fos.write(bys, 0, len);
//						System.out.println("?");
					}
					fis.close();
					fos.close();
				}
				//如果File对象是子目录,递归,看看子目录下面到底有什么
				else if(file.isDirectory()) {
					//递归:file作为源目录,newDir(d:\\a\\myAPI)作为目标目录,形成新的目录:d:\\a\\myAPI\\之前myAPI下的目录
					copyDir(file,newDir);
				}
			}
		}
		else{
			System.out.println("np");
		}
		
	}
	
}

你可能感兴趣的:(java,开发语言)