java代码实现复制一个文件夹&独特流中的内存流、打印流、对象流(序列化和反序列化)

别再为SCI论文配图发愁了!手把手教你用PS+AI搞定从数据图到模式图的全流程 本文详细解析了如何利用Photoshop(PS)和Illustrator(AI)高效完成SCI论文配图的全流程,涵盖数据可视化、模式图设计及期刊适配性输出。通过实战案例,帮助科研人员掌握位图与矢量图的处理技巧,提升论文配图质量,满足不同期刊的出版要求。 阅读详情

1.内存流:ByteArrayOutputStream,内存流效率高.内存流关闭无效.

eg:public static void main(String[] args) throws IOException {
		//1.创建流对象
		ByteArrayOutputStream baos=new ByteArrayOutputStream();
		//2.用流对象向内存中写入内容
		baos.write("abdefefefeefefefeffef我是中国人,我爱中国.写个50个字符试试,试试就试试.我爱学习,学习爱我.我想静静,静静是谁".getBytes());
		System.out.println("内容写入成功");
		//3.关流
		baos.close();
		
		//第一种:获得内存输出流中数据toByteArray()
		byte[] content=baos.toByteArray();	
		String s1=new String(content);
		System.out.println("第一种:"+s1);
		
		//第二种:获得内存输出流中数据toString()
		String s2=baos.toString();
		System.out.println("第二种:"+s2);
		
		//第三种:获得内存输出流中数据,将数据写入到文件中writeTo()
		baos.writeTo(new FileOutputStream("aa"+File.separator+"a1.txt"));
		System.out.println("第三种获得数据写入文件成功");
		
		/*第四种:用内存读取流来读取内存中数据*/
		//创建流对象
        ByteArrayInputStream bais=new ByteArrayInputStream(baos.toByteArray());
		//准备一个数组
		byte[] b=new byte[1024];
		//用流对象调用方法读取数据,返回读取的长度,读取的内容存在数组中
		int len;
		while ((len=bais.read(b))!=-1) {
			//将读取的内容转换字符串输出
			String s4=new String(b, 0, len);
			System.out.println(s4);
		}
		System.out.println("第四种读取完毕");
		//关流
		bais.close();
	}

2.打印流:

2.1:字节打印流:PrintStream

eg:public static void main(String[] args) {
		//声明流对象
		PrintStream ps1=null;
		try {
			//1.创建流对象
			ps1=new PrintStream("aa"+File.separator+"a2.txt");
			//2.用流对象向文件中写入内容
			ps1.append("第一阶段Java注重规范和语法");
			ps1.print("第二阶段Java注重项目综合能力及调试bug能力");
			ps1.println("第三阶段Java注重企业级开发,框架使用及团队开发");
			ps1.write("第四阶段Java注重分布式和微服务开发,注重项目性能".getBytes());
			ps1.printf("%.2f", 3.1415926);
			System.out.println("写入成功!");
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			//3.关流
			if (ps1!=null) {
				ps1.close();
			}
		}
		}

2.2:字符打印流:PrintWriter

eg:public static void main(String[] args) {
	//声明流对象
	PrintWriter pw=null;
	try {
		//1.创建流对象
		pw=new PrintWriter("aa"+File.separator+"a3.txt");
		//2.用流对象向文件中写入内容
		pw.append("第一阶段Java注重规范和语法");
		pw.print("第二阶段Java注重项目综合能力及调试bug能力");
		pw.println("第三阶段Java注重企业级开发,框架使用及团队开发");
		pw.write("第四阶段Java注重分布式和微服务开发,注重项目性能");
		pw.printf("%.2f", 3.1415926);
		pw.printf("%d%%", 50);
		System.out.println("写入成功!");
	} catch (Exception e) {
		e.printStackTrace();
	}finally {
		//3.关流
		if (pw!=null) {
			pw.close();
		}
	}
}

2.3:输出重定向(重新定义一个方向输出):将原来在控制台输出的内容,改变方向,写入到文件中.

eg:public static void main(String[] args) throws IOException {
		//声明一个存原来打印输出流对象
		PrintStream p1=System.out;
		//输出重定向,输出到文件中
		System.setOut(new PrintStream("aa"+File.separator+"a4.txt"));
		//输出内容
		System.out.append("别无我有");
		System.out.print("别有我优");
		System.out.println("无所畏惧");
		System.out.write("别优我精".getBytes());
		System.out.printf("%.3f", 3.141592631415927);
		
		//输出重定向,重新输出到控制台
		System.setOut(p1);
		System.out.println("今天中午乌云散去了");
		System.out.println("控制台,我又回来了");
	}

2.4:输入重定向(重新定义一个方向来接收数据):将原来从控制台接收的数据,改变方向,从文件中接收数据.

  eg:public static void main(String[] args) throws FileNotFoundException {
		//声明一个变量存标准输入流
		InputStream is=System.in;
		//输入重定向,在文件中接收数据
		System.setIn(new FileInputStream("aa"+File.separator+"a5.txt"));
		
		//创建Scanner类的对象,输入一个输入流作为参数,调用方法从键盘上接收数据
		Scanner input=new Scanner(System.in);
		System.out.println("请输入姓名:");
		String sname=input.next();
		System.out.println("请输入爱好:");
		String shobby=input.next();
		System.out.println("接收姓名为:"+sname+",爱好为:"+shobby);
		
		//输入重定向,重新在控制台接收数据
		Scanner input2=new Scanner(is);
		System.out.println("请输入一句话:");
		String word=input2.next();
		System.out.println("接收话为:"+word);
	}

3.对象流:用来程序间交换数据.

3.1:序列化:将程序(内存)中对象存到磁盘的文件中,叫序列化.

持久化:将内存中短暂存储的数据存长久存储的磁盘上叫持久化.

反序列化:将磁盘上文件中对象读取到程序(内存)中,叫反序列化.

3.2:对象输出流:ObjectOutputStream

注意:对象输出流向文件中写入对象的过程,其实就是序列化.

eg:public static void main(String[] args) throws IOException {
		//声明流对象
		ObjectOutputStream oos=null;
		
		try {
			//1.创建流对象
			oos=new ObjectOutputStream(new FileOutputStream("aa"+File.separator+"a6"+File.separator+"a11.txt"));
			/*2.用流向文件中写入对象*/
			
			//第一种:写入字符串对象
			String word1="先死后活,死去活来";	
			//将字符串对象写入文件中
			oos.writeObject(word1);
			
			//第二种:写入自定义的对象
			Student stu1=new Student("赵天", 18,"girl");
			//将自定义对象写入文件中
			oos.writeObject(stu1);
			
			//第三种:写入多个对象存到集合中,再将集合写入到文件中
			//创建一个集合
			List<Student> stuList=new ArrayList();
			stuList.add(new Student("张三", 11, "man"));
			stuList.add(new Student("李四", 21, "man"));
			stuList.add(new Student("王五", 31, "man"));
			//将对象集合写入文件中
			oos.writeObject(stuList);
			
			System.out.println("写入成功");
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			//3.关流
			if (oos!=null) {
				oos.close();
			}
		}
	}

3.3:对象输入流:ObjectInputStream

注意:对象输入流将文件中数据读取到程序中过程,其实就反序列化.

eg:public static void main(String[] args) throws IOException {
		//声明流对象
		ObjectInputStream ois=null;
		
		try {
			//1.创建流对象
			ois=new ObjectInputStream(new FileInputStream("aa"+File.separator+"a6"+File.separator+"a11.txt"));
			/*2.用流来读取文件中对象*/
			
			//第一种:读取一个字符串对象
			Object word2=ois.readObject();
			//System.out.println("读取的内容为:"+word2);
			
			//第二种:读取写入的自定义的对象
			Student stu2=(Student) ois.readObject();
			System.out.println(stu2);
			
			//第三种:读取,写入多个对象存到集合中,再将集合写入到文件中
			List<Student> stulist2=(List<Student>) ois.readObject();
			for (Student stu : stulist2) {
				System.out.println(stu);
			}
			
			System.out.println("读取完毕");
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			//3.关流
			if (ois!=null) {
				ois.close();
			}
		}
	}

3.4:对象输入流读取的方法与对象输出流写入的方法类型要一致,否则会报错EOFException.(write数据类型()和read数据类型()这两个方法的数据类型要一致)

3.5:只有实现序列化接口java.io.Serializable接口的类的对象,才能(序列化)用对象输出流写入到文件中.

3.6:版本号错误:local class incompatible: stream classdesc serialVersionUID = -1243946572963888417, local class serialVersionUID = 3821573340049539149

操作:先将学生类的一个对象进行序列化(用对象输出流存到文件中),再修改学生类,再将现在的学生类反序列化取数据,就报版本号错误.

原因:学生类只实现序列化接口,但是没有因定化序列化版本号,这样学生类每修改一次就会重新产生一个新的序列化版本号,如果你用原来序列化版本号对应类的对象存的数据,用新的序列化版本号就取不出数据.

解决:给每个序列化类固定版本号.

eg:	private static final long serialVersionUID = -1243946572963888417L;

3.7:如果序列化类中属性不想实现序列化,就用static或transient来修饰就可以

eg:
private static String sex;
private transient String sex;

3.8:如果想用对象流存多个对象到文件中,可以先将多个对象存在集合中,再把集合存到文件中.

java代码实现复制一个文件夹(文件夹可以有子子孙孙文件或目录)

package com.qf.day28.zy;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

/**
 * 2.复制一个文件夹(文件夹可以有子子孙孙文件或目录)
 * 分析:文件夹只能创建不能复制,想复制,用代码构造文件夹来创建
 * 		文件夹中文件的复制,用IO流复制
 */
public class Zy2 {

	public static void main(String[] args) {
		//原文件夹
		File sourceFile=new File("aa");
		//目录文件夹
		File destFile=new File("bb");
		//调用文件夹复制方法
		if (sourceFile.isDirectory()&&destFile.isDirectory()) {
			copyFold(sourceFile,destFile);
			System.out.println("文件夹拷贝成功");
		}else {
			System.out.println("原文件夹或目标文件夹不是文件夹");
		}
	}

	/**
	 * 复制文件夹
	 * @param sourceFile
	 * @param destFile
	 */
	public static void copyFold(File sourceFile, File destFile) {//sourceFile=aa,destFile=bb
		//构造文件夹对象
		File f1=new File(destFile, sourceFile.getName());//bb\\aa
		if (!f1.exists()) {//如果文件夹不存在就创建
			f1.mkdirs();
		}
		
		//获得原文件夹下面所子元素
		File[] fileList=sourceFile.listFiles();
		//遍历子元素
		for (File f2 : fileList) {
			if (f2.isDirectory()) {//文件夹,复制
				copyFold(f2,f1); 
			} else {//文件复制
				copyFile(f2,f1);
			}
		}
		
	}

	/**
	 * 复制文件
	 * @param f2 要复制文件
	 * @param f1 目录文件夹
	 */
	private static void copyFile(File f2, File f1) {
		//声明流对象
		FileInputStream fis=null;
		FileOutputStream fos=null;
		
		try {
			//1.创建输入流和输出流对象
			fis=new FileInputStream(f2);
			fos=new FileOutputStream(new File(f1, f2.getName()));
			/*用流边读取边写入*/
			//准备一个数组
			byte[] b=new byte[1024];
			//先读取一次,返回读取的长度,读取的内容存到数组中
			int len=fis.read(b);
			//判断,接着读
			while (len!=-1) {
				//将读取的内容写入到文件中
				fos.write(b, 0, len);
				//接着读
				len=fis.read(b);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			//3.关流
			try {
				if (fis!=null) {
					fis.close();
				}
				if (fos!=null) {
					fos.close();
				}
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
	}
}

28377D Bootloader 架构 阅读详情

相关推荐

最邻近点对问题(Closest-Pair Problem):二维的分治解法详解

低维时,最邻近点对问题可以利用分治求解。但是网络上相关资料良莠不齐,对于3维甚至难有有价值的参考。最近恰巧梳理了123维最邻近点对问题的相关知识,故在此分享。这是该系列的第二篇,介绍二维情况的分治解法。

Carl_Rabbit的博客 1万+

Java 实现文件复制及文件夹复制

在Java中,有多种方法可以实现文件的复制。以下是几种常用的方式:使用字节流进行复制:通过FileInputStream和FileOutputStream分别创建源文件和目标文件的输入输出流,然后通过循环读取源文件内容,并将数据写入目标文件中进行复制。可以使用字节数组作为缓冲区,提高复制效率。需要手动处理流的打开、关闭和异常处理。使用字符流进行复制:通过FileReader和FileWriter分别创建源文件和目标文件的字符流,然后通过循环读取源文件内容,并将数据写入目标文件中进行复制。

qq_57570052的博客 6962

数据采集卡架构与PCIe优化设计详解

数据采集卡(DAQ)作为工业自动化中的关键设备,其核心在于模数转换(ADC)和数字信号处理技术。现代系统普遍采用PCIe总线架构,通过DMA传输和时钟同步技术实现高速数据采集。在信号调理环节,可编程增益放大器(PGA)和抗混叠滤波器确保信号质量;而Σ-Δ型ADC则提供高达24位的分辨率。实际应用中,从电力监测到机床振动分析,数据采集卡需要结合具体场景优化配置。通过合理的PCB布局和EMI防护设计,可以有效提升系统在工业环境中的可靠性。

weixin_29168675的博客 912

IO流实现"文件克隆"

文件克隆 例题一:使用带缓冲区的字节流实现文件的克隆。 使用BufferedInputStream和BufferedOutputStream来实现文件的复制 import java.io.*; /** * 添加缓冲区之后的字节流的拷贝 */ public class TestCopy2 { public static void main(String[] args) { ...

weixin_45545805的博客 283

别再只当代码阅读器了!手把手教你用Understand的实体定位器和信息浏览器,5分钟精准定位代码逻辑

本文深入解析Understand代码分析工具的高级功能,重点介绍实体定位器和信息浏览器的实战应用。通过5分钟快速定位代码逻辑的技巧,帮助开发者从代码阅读者升级为逻辑侦探,提升大型代码库的分析效率。文章包含过滤搜索、调用链追踪等实用方法,是掌握Understand核心功能的必备指南。

weixin_28745821的博客 293

海鸥派OpenEuler开发板实战:从烧写到SSH连接的完整指南

本文提供海鸥派OpenEuler开发板从开箱到SSH远程连接的完整实战指南。详细介绍了基于海思SD3403/SS928芯片的算力开发板系统烧写、存储扩容、网络配置等关键步骤,帮助开发者快速上手这款AI边缘计算设备,并实现高效的远程开发与管理。

ruby5的博客 1121

4种Java文件复制的方法

类是在 Java 1.4 中引入的,FileChannel 可用于在 java 中复制文件。根据transferFrom()方法 javadoc,这种复制文件的方式应该比使用 Streams 复制文件更快。这是可用于使用 FileChannel 复制文件的方法。这是可用于使用流的java复制文件的方法。如果您正在使用 Java 7 或更高版本,则可以使用Files类的copy()方法在 java 中复制文件。这是上面程序的输出,注意注释了上面的代码,以确保每次只使用一种方法进行 java 文件复制操作。

qq_30436011的博客 1万+

ur3手眼标定+realsenseL515

知乎 csdn

AI_future的博客 978

java内存复制_java通过内存复制文件

public static long copyFile(String s1, String s2) throws Exception {File f1 = new File(s1);File f2 = new File(s2);long time = new java.util.Date().getTime();int length = 2097152;FileInputStream in = n...

weixin_42575505的博客 303

22版本Altium Designer导出生产文件的规范化操作指南

本文详细介绍了PCB设计中的Gerber文件导出流程及相关文件生成方法。主要内容包括:1)Gerber文件导出的5个关键设置步骤;2)NC钻孔文件的导出方法;3)坐标文件的生成方式;4)文件打包规范要求必须包含Gerber文件、NC钻孔文件和坐标文件;5)文件提交的两种方式(新手推荐提交原始工程文件,量产推荐仅提交Gerber文件包)。文章还特别强调了单位一致性、精度验证等注意事项,为PCB设计文件的规范输出提供了完整指导。

qq_56506325的博客 1060

Codesys 3.5报警功能配置保姆级教程:从变量定义到确认方式(含REF/ACK详解)

本文详细介绍了Codesys 3.5报警功能的配置流程,从变量定义到确认方式的选择,特别解析了REF和ACK两种确认方式的底层逻辑。通过实战案例和代码示例,帮助工程师快速掌握报警系统的搭建与调试技巧,提升工业自动化项目的可靠性。

weixin_29245767的博客 458

Java文件复制(拷贝)

/** * 完成文件拷贝,将e盘文件拷贝到d盘 * 1.创建文件的输入流,将文件读入到程序 * 2.创建文件的输出流,将读取的文件写入到指定的文件 */ public class FileCopy { public static void main(String[] args) { String srcFilePath = "e:\\图片素材\\img.jpg";//要拷贝的文件路径 String destFilePath = "d:\\img.jpg";/.

qq_61480980的博客 907

KMD 核心功能模块——命令提交与调度:Ring Buffer 与硬件引擎交互

《KMD 中的中断与同步机制——从 Fence 到 Timeline Semaphore 的深度解析》GPU 需要持续接收命令,但硬件执行是流式处理。Ring Buffer 作为。导致 CVE-2022-1234(GPU 挂起),修复后强制检查。:命令提交延迟从 50μs 降至 5μs(20 倍提升)。,CPU 通过写入该地址更新指针(避免直接操作寄存器)。,实现 CPU 与 GPU 的高效协同。),GPU 读指针更新是硬件自动完成的。(通过硬件状态机),实现真正的零等待。AMDGPU 驱动曾因。

amy_mhd的博客 83

Java IO示例总结

JavaIO 在javaIO中主要有5个类和1个接口,它们是:File,InputStream,OutputStream,Reader,Writer,Serializable接口。 File类主要功能是完成与平台无关的文件操作。其中File.pathSeparator表示路径分隔符“:\” File.separator则表示分隔符“/”或“\\” 字节流和字符流:字...

weixin_30767835的博客 77

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

杂七杂八的流

文章目录File:文件类,用来操作文件或文件夹(目录/路径)递归:有条件的自己调用自己(方法)求:1-100之间的和求1-10之间的所有偶数的积与所有奇数的积的差字符缓冲流实例1实例2实例3:使用字符缓冲流实现文件的拷贝设置行号模拟BufferedReader两种设计模式装饰设计模式适配器设计模式字符流:传输的是字节,只能用于字符的传输实例1:使用字节流实现图片的复制实例2:使用字节缓冲流实现图片...

大数据开发工程师 250

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Java实现文件复制

利用IO流进行文件复制

qq_67021195的博客 1611

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

day-2-1-4

java对象流

haodi12138的博客 262

java之通过FileChannel实现文件复制

1、FileChanel介绍Java NIO FileChannel是连接文件的通道,从文件中读取数据和将数据写入文件。Java NIO FileChannel类是NIO用于替代使用标准Java IO API读取文件的方法。FileInputStream的getChannel方法获取的文件通道是只读的,当然通过FileOutputStream的getChannel的方法获取的文件通道是可写的部分A...

码莎拉蒂 4493

java读取文件到内存

import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.io.IOException;/** * @description 本类实现了按行读取文件内容到内存,并打印输出的操作 * @time 2010-3-2 */public class read

narsh的专栏 1万+

java通过内存复制文件

2019独角兽企业重金招聘Python工程师标准&gt;&gt;&gt; ...

weixin_34163741的博客 181

(Java-19)io流实现文件夹与文件内容的复制

实现文件夹的复制

qq_49511498的博客 2523

java实现文件copy

学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!最后再分享的一些BATJ等大厂20、21年的面试题,把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。Mybatis面试专题MySQL面试专题并发编程面试专题《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!并发编程面试专题。

q16974058的博客 789

Java序列化和反序列化(详解)

java序列化及可序列化讲解,代码清晰易懂。

qq_62414755的博客 4万+

Java实现复制文件(文件、文件夹)

Java复制文件主要是File工具类中`listFiles()`方法先列出文件夹中的文件, 然后使用`BufferedInputStream`缓冲输入流接收要复制的文件, 再用`BufferedOutputStream`缓冲输出流的`write()`方法写入文件

weixin_47390965的博客 7887

【Java】实现文件夹复制

1. 实现单级文件夹复制 2. 实现多级文件夹复制

weixin_57807561的博客 905

Java实现文件复制功能

import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.List; /** * 文件工具 * * @author: 向振华 * @date: 2019/11/19 09:00 */...

xzh_blog 3897
上一篇: File类中的常用方法&IO流中的字节流
下一篇: 线程(线程中常用方法)
Java_LXM
博客等级 码龄7年 39粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值