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