会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132390个问题
JAVA 全系列/第三阶段:数据库编程/Oracle 数据库的使用 36436楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/手写服务器项目(旧) 36437楼
大数据全系列/第八阶段:Hive数仓 项目一 电信基站掉话率分析实战/概述、搭建实战、sql语法、分区 36439楼
JAVA 全系列/第三阶段:数据库编程/SQL 语言 36441楼
Python 全系列/第五阶段:数据库编程/mysql的使用 36442楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/手写服务器项目(旧) 36444楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/常用类 36445楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/手写服务器项目(旧) 36446楼
JAVA 全系列/第一阶段:JAVA 快速入门/JAVA入门和背景知识 36449楼

public class CopyDirectory{
	public static void main(String[] args) {
		copyDirectory(new File("G:\\电子大赛文件\\copyfile"),new File("D:\\copyfile"));
	}
	
	//复制文件夹的方法
	public static void copyDirectory(File src,File dir) {
		if(!dir.exists()) dir.mkdir(); //目的地是否有dir目录, 没有就创建一个文件夹
		File[] files = src.listFiles();
		
		for(File file:files) {
			if(file.isFile()) { //如果当前File对象是文件  则直接进行拷贝文件
				//new File(src +"\\" + file.getName()) 通过构造方法,创建每一个文件(目录)对象
				copyFile(new File(src +"\\" + file.getName()),new File(dir +"\\" + file.getName()));
			}else {  //如果当前File对象是目录 通过递归调用 实现多层级复制
				copyDirectory(new File(src +"\\" + file.getName()),new File(dir +"\\" + file.getName()));
			}
		}
	} 
	
	//复制一个文件
	/**
	 * @param src
	 * @param dir
	 */
	public static void copyFile(File src,File dir) {
		BufferedInputStream bis = null;
		BufferedOutputStream bos = null;
		
		try {
			bis = new BufferedInputStream(new FileInputStream(src));
			bos = new BufferedOutputStream(new FileOutputStream(dir));
			byte[] b = new byte[1024];  // 创建byte数组的中转站,缓存为1024byte
			int len;  // 接受read()方法的返回值
			 
			while((len = bis.read(b)) != -1) {
				bos.write(b); //写出byte数组的数据
				bos.flush();
			}

		} catch (FileNotFoundException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		if(bos == null) {
			try {
				bos.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if(bis == null) {
			try {
				bis.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
	}
	
}

老师,在复制文件的代码中,对于

          while((len = bis.read(b)) != -1) {

bos.write(b); 

bos.flush();

}

如果循环条件写成 while(len = bis.read(b) != -1) { }程序会报错。java程序的执行顺序是 从左到右、从上到下。去掉括号不影响程序执行顺序啊,为什么就会报错呢?

JAVA 全系列/第二阶段:JAVA 基础深化和提高/IO 流技术(旧) 36450楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637