首页
友链
Search
1
01-快捷命令
132 阅读
2
寒假计划
128 阅读
3
浏览器规范(ES module)和 node.js 规范(Common JS)
120 阅读
4
03-概念解析
119 阅读
5
学期计划(大三下学期)
102 阅读
计划
算法
面试题
运维
Ansible
Linux
数据库
neo4j
共用
web 前端
CSS
JavaScript
Vue
Node.js
英语单词
工程化
JAVA
mysql
收获
面试
mybatis
Spring
基础
spring-mvc
问题
项目
宠物乐园
速查
问题集
git
学习
sql
二阶段
登录
Search
标签搜索
spring
mysql
vue
ansible
CSS
面试
计划
收获
JAVA面试题
spring-mvc
Starrylsi
累计撰写
106
篇文章
累计收到
37
条评论
首页
栏目
计划
算法
面试题
运维
Ansible
Linux
数据库
neo4j
共用
web 前端
CSS
JavaScript
Vue
Node.js
英语单词
工程化
JAVA
mysql
收获
面试
mybatis
Spring
基础
spring-mvc
问题
项目
宠物乐园
速查
问题集
git
学习
sql
二阶段
页面
友链
搜索到
3
篇与
的结果
2024-10-03
2024-10-03_IO流实践
文件复制可以使用封装好的 files.copy(),也可以使用原生的需求 3: 分别使用文件流和缓冲流复制一个长度大于 100MB 的视频文件,并观察效率的差异。问题: 不知道在文件复制时先使用哪一个关键: 输入流就是在读取数据,输出流就是在写数据理解清楚两个概念:输入流是 Java 中用于从不同数据源读取数据的流输出流是 Java 中用于将数据写入不同目的地的流使用文件流复制为什么需要这两段代码?第一段代码设置了文件读取和写入的“通道”。第二段代码实现了文件内容的实际复制。 String sourceFile = "H:\\My_Life_Archive\\Entertainment-娱乐\\VID_20210916_082147.mp4"; String destFile = "H:\\My_Life_Archive\\Entertainment-娱乐\\outputVideo.mp4"; // 使用文件流复制文件 long startTime = System.currentTimeMillis(); // 第一段:创建输入输出流对象 try (FileInputStream readVideo = new FileInputStream(sourceFile); FileOutputStream writeVideo = new FileOutputStream(destFile)) { //第二段:读取和写入数据 int byteData; while ((byteData = readVideo.read()) != -1) { writeVideo.write(byteData); } } catch (IOException e) { e.printStackTrace(); } long endTime = System.currentTimeMillis(); System.out.println("文件流复制耗时:" + (endTime - startTime) + "ms");使用缓冲流复制创建通道设置缓冲数组大小判断是否文件末尾写入数据关闭流String sourceFile = "H:\\My_Life_Archive\\Entertainment-娱乐\\VID_20210916_082147.mp4"; String destFile = "H:\\My_Life_Archive\\Entertainment-娱乐\\outputVideo.mp4"; long startTime = System.currentTimeMillis(); //1.创建通道 try { BufferedInputStream bufferedReadVideo = new BufferedInputStream(new FileInputStream(sourceFile)); BufferedOutputStream bufferedWriteVideo = new BufferedOutputStream(new FileOutputStream(destFile)); //2.复制内容 byte[] buffer = new byte[1024*1024]; int bytesRead; while ((bytesRead = bufferedReadVideo.read(buffer)) != -1) { bufferedWriteVideo.write(buffer, 0, bytesRead); } bufferedWriteVideo.flush(); } catch (IOException e) { e.printStackTrace(); } long endTime = System.currentTimeMillis(); System.out.println("文件流复制耗时:" + (endTime - startTime) + "ms");需求 4: 复制文件夹 d:/java 下面所有文件和子文件夹内容到 d:/java2。前置知识listFiles() 方法被调用以获取目录下的所有文件和子目录。使用 java.nio.file.Files.copy() 方法来复制一个文件。这里使用了两个 toPath() 方法将 java.io.File 对象转换成 java.nio.file.Path 对象,以便于使用 Files.copy() 方法进行文件复制代码实现/** * 复制一个目录及其内容到另一个位置。 * * @param src 源目录 * @param dest 目标目录 */ private static void copyFolder(File src, File dest) { // checks if(src==null || dest==null) return; if(!src.isDirectory()) return; if(dest.exists()){ if(!dest.isDirectory()){ //System.out.println("destination not a folder " + dest); return; } } else { dest.mkdir(); } File[] files = src.listFiles(); if(files==null || files.length==0) return; for(File file: files){ File fileDest = new File(dest, file.getName()); //System.out.println(fileDest.getAbsolutePath()); if(file.isDirectory()){ copyFolder(file, fileDest); }else{ if(fileDest.exists()) continue; try { Files.copy(file.toPath(), fileDest.toPath()); } catch (IOException e) { //e.printStackTrace(); } } } } 我总结的关键步骤(符合我编写的步骤)第一步: 把复制文件的逻辑编写好获取文件列表循环列表初始化目标文件对象判断是否为目录,是就回调本身,不是就复制第二步: 考虑结束递归的条件确保传入的 src 和 dest 参数都是有效的(非 null)。确保 src 是一个目录。确保 dest 要么是一个已存在的目录,要么是一个可以成功创建的新目录。AI 总结的整体步骤参数检查:if (src == null || dest == null):确保源目录和目标目录都不为 null。 if (!src.isDirectory()):确保源目录确实是一个目录。 if (dest.exists()):检查目标目录是否已经存在。 如果存在且不是一个目录,则直接返回。 如果不存在,则尝试创建目录获取目录内容:File[] files = src.listFiles();:获取源目录下的所有文件和子目录。遍历目录内容:for (File file : files):遍历目录下的所有文件和子目录。 如果遇到子目录,则递归调用 copyFolder 方法继续复制。 如果遇到普通文件,则检查目标文件是否已存在。 如果已存在,则跳过复制。 如果不存在,则使用 Files.copy 方法复制文件,并使用 REPLACE_EXISTING 选项确保如果目标文件存在则被替换。
2024年10月03日
10 阅读
0 评论
0 点赞
2024-09-16
02-javabean规范说明
了解: 个人开发满足不了甲方的期限要求,所以需要多人协作开发,为了让多人协作开发,java规定了一些规范(javabean)掌握: 能手写每一个javabean规范(为什么要学javase)学他的原因: 一个专门的规范,不满足javabean规范后续框架会报错.bean规范要求/** * javabean 是有一个专门的规范的 不满足javabean规范 后续框架报错 * * 要求每一个bean中必须提供 私有属性 * 1.无参构造方法 * 2.get&set方法 (反射) * 3.hashcode和equals方法(为了使用Collection接口的相关功能) * 4.序列化 (对象流 保存对象时 非序列化对象 会报错) * 5.比较器 (内部比较器和外部比较器) 用于排序 * 6.多线程 实现Runnable或者Callable接口 * * 由于bean规范过于复杂 功能过于繁琐 所以 实际开发中一般使用某一个库 或者某一个框架的规范 * 可以理解为简化版bean规范 由于规范不同 包名也不同 entity pojo domain * * * */
2024年09月16日
13 阅读
0 评论
0 点赞
2024-09-12
01-servlet
Servlet概念servlet教程servlet就是一个接口,定义了浏览器被访问到(tomcat识别)的规则将来我们自定义一个类,实现Servlet接口,复写方法快速入门创建一个JavaEE项目定义一个接口,实现Servlet接口实现接口中的抽象方法配置servlet(url映射到java类需要在web.xml中配置后才能映射)执行原理1.当服务器接收到客户端浏览器的请求后,会解析浏览器请求url路径,获取访问的Servlet的资源路径2.查找web.xml文件,是否有对应的标签内容3.如果有,则找到对应的全类名4.tomcat会将字节码文件加载进内存,并创建其对象5.调用其方法生命周期1.被创建: 执行init方法,只执行一次2.提供服务: 执行service方法,执行多次3.被销毁: 执行destory方法,只执行一次
2024年09月12日
12 阅读
0 评论
0 点赞