为了账号安全,请及时绑定邮箱和手机立即绑定

copyFileByBytes:47ms

copyFileByDataOutputStream:31ms

copyFileByBufferedOutputStream:49ms

//排除时间误差,三种方法基本一样.

	public static void copyFileByBytes(File from, File to) throws IOException {
		if (!from.exists()) {
			System.out.println("文件不存在");
		}
		if (!from.exists()) {
			System.out.println(from + "不是文件");
			// throw InterceptorOperations
			// throw IORInterceptor;
		}
		FileOutputStream fos = new FileOutputStream(to);
		FileInputStream fis = new FileInputStream(from);
		byte[] buf = new byte[1024 * 1024];
		int b;
		while ((b=fis.read(buf)) != -1) {
			fos.write(buf, 0, b);
//			fos.flush();
		}
		fos.flush();
		fos.close();
		fis.close();
	}

	public static void copyFileByDataOutputStream(File from, File to)
			throws IOException {
		if (!from.exists()) {
			throw new IllegalArgumentException("文件:" + from.getAbsolutePath()
					+ "不存在");
		}
		if (!from.exists()) {
			throw new IllegalArgumentException(from + "不是文件,可能是文件夹");
			// throw InterceptorOperations
			// throw IORInterceptor;
		}
		DataOutputStream dos = new DataOutputStream(new FileOutputStream(to));
		DataInputStream dis = new DataInputStream(new FileInputStream(from));

		int i;
		byte[] buf = new byte[1024 * 1024];
		while ((i = dis.read(buf, 0, buf.length)) != -1) {
			dos.write(buf, 0, i);
			
		}
		dos.flush();
		dos.close();
		dis.close();
	}

	public static void copyFileByBufferedOutputStream(File from, File to)
			throws IOException {
		if (!from.exists()) {
			throw new IllegalArgumentException("文件:" + from.getAbsolutePath()
					+ "不存在");
		}
		if (!from.exists()) {
			throw new IllegalArgumentException(from + "不是文件,可能是文件夹");
			// throw InterceptorOperations
			// throw IORInterceptor;
		}
		BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(to));
		BufferedInputStream bis = new BufferedInputStream(new FileInputStream(from));

		int i;
		byte[] buf = new byte[1024 * 1024];
		while ((i = bis.read(buf, 0, buf.length)) != -1) {
			bos.write(buf, 0, i);
			
		}
		bos.flush();
		bos.close();
		bis.close();
	}
	


正在回答

1 回答

把flush拿到循环外面,不影响文件完整性.经MD5校验,三种方法考贝的文件和原始文件一致.不知道是不是像前面同学说的,后台缓冲区满了会自动flush.

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信