当前位置: 首页 > article >正文

文件IO操作详解

这篇文章我将总结关于文件IO的一些概念的东西和关于文件IO类的使用1.认识路径2.文件类型3.文件系统操作4.文件内容操作认识路径路径也是一个目录结构是一颗目录树N叉搜索树~~~绝对路径E:\JavaCode\文件IO我们在文件夹中复制一个文件路径这个文件路径就是一个绝对路径比如我要查找我当前电脑下的一个文件文件IO我就可以按照绝对路径去查找先从E盘 ---- JavaCode 就可以查找到文件IO此文件~~~相对路径./JavaCode意思是在当前文件下查找JavaCode此文件./表示当前文件位置文件类型1.文本文件内部存储的是字符串内容每个部分都是一个字符2.二进制文件可以存储任意的数据当你不清楚这个文件究竟是文本文件还是二进制文件时其实你打开看一眼就知道了如果打开的是乱码文件那么就是一个二进制文件~~~IO -----InputStream(输入流)OutputStream输出流对于输入和输出在计算机中是站在CPU的视角看待的文件系统操作文件系统操作主要是针对文件进行创建复制删除查看目录查看当前路径移除.....1.) File的构造方法File的对象就对应一个文件或者一个目录目录也是一种文件~~~而./test.txt当前路径就取决于你程序运行时所在的工作目录public class Demo { public static void main(String[] args) { File file new File(./test.txt); } }2.getParent ---- 获取File对象的父目录文件路径public class Demo { public static void main(String[] args) { File file new File(./test.txt); System.out.println(File对象的父目录路径为 file.getParent()); } }3.) getName --- 获取File对象的纯文件名public class Demo { public static void main(String[] args) { File file new File(./test.txt); System.out.println(File对象的纯文件名为 file.getName()); } }4.getPath --- 获取File对象的整个路径public class Demo { public static void main(String[] args) { File file new File(./test.txt); System.out.println(File对象的路径为 file.getPath()); } }5.getAbsolutePath --- 获取File对象的绝对路径public class Demo { public static void main(String[] args) { File file new File(./test.txt); System.out.println(File对象的绝对路径为 file.getAbsolutePath()); } }6.getCononicalFile ---- 获取Filed对象修饰过的绝对路径public class Demo { public static void main(String[] args) { File file new File(./test.txt); System.out.println(File对象的路径为 file.getCanonicalFile()); } }针对AbsolutePath中不必要的的内容给去掉~~~7.判断当前文件是否存在 ---- existspublic class Demo { public static void main(String[] args) { File file new File(./test.txt); System.out.println(test.txt文件是否存在 file.exists()); } }8.) 判断当前文件是否是一个目录文件 --- isDirectorypublic class Demo { public static void main(String[] args) { File file new File(./test.txt); System.out.println(test.txt文件是否是一个目录文件 file.isDirectory()); } }9.判断当前文件是否是一个普通文件 --- isFilepublic class Demo { public static void main(String[] args) { File file new File(./test.txt); System.out.println(test.txt文件是否是一个普通文件 file.isFile()); } }10.创建文件 --- createNewFilecreateNewFile 会返回一个返回值 --- 是否创建成功true 或 falsepublic class Demo { public static void main(String[] args) { File file new File(./test.txt); //查看文件是否存在 System.out.println(test.txt文件是否存在 file.exists); //创建文件 System.out.println(test.txt文件是否创建成功 file.createNewFile()); //再次查看文件是否存在 System.out.println(test.txt文件是否存在 file.exists()); } }11.删除File对象文件 --- deletepublic class Demo { public static void main(String[] args) { File file new File(./test.txt); //查看文件是否存在 System.out.println(test.txt文件是否存在 file.exists); //创建文件 System.out.println(test.txt文件是否创建成功 file.createNewFile()); //再次查看文件是否存在 System.out.println(test.txt文件是否存在 file.exists()); //删除File对象的文件 System.out.println(test.txt文件是否删除成功 file.delete()); //再次查看文件是否存在 System.out.println(test.txt文件是否存在 file.exists()); } }12.删除File对象的文件但是在进程退出前才会删除 --- deleteOnExitpublic class Demo { public static void main(String[] args) { File file new File(./test.txt); //查看文件是否存在 System.out.println(test.txt文件是否存在 file.exists); //创建文件 System.out.println(test.txt文件是否创建成功 file.createNewFile()); //再次查看文件是否存在 System.out.println(test.txt文件是否存在 file.exists()); //删除File对象的文件 System.out.println(test.txt文件是否删除成功 file.deleteOnExit()); //再次查看文件是否存在 System.out.println(test.txt文件是否存在 file.exists()); } }13.返回目录下的所有文件名 --- list返回值是Stringpublic class Demo { //通过lis拿到D盘下的所有文件名 -- list只保存文件名 public static void main(String[] args) { File file new File(D:/); //通过list拿到D盘目录下的所有文件的文件名 String[] files file.list(); //如果目录下没有文件就是一个空目录 if(files null) { System.out.println(空目录); return; } for(String name : files) { //打印文件名 System.out.println(name); } } }14.通过listFile可以拿到某个目录下的所有文件并保存起来后期可以针对某个文件进行操作public class Demo { //通过listFile拿到D盘下的所有文件通过File对象收集起来后续就可以通过File类中的方法进行操作 public static void main(String[] args) { File file new File(D:/); File[] files file.listFiles(); //如果目录下没有文件就是一个空目录 if(files null) { System.out.println(空目录); return; } for(File name : files) { System.out.println(name.getName());//获取文件名字 } } }15.创建目录 --- mkdir创建一层目录public class Demo { //创建目录 --- 一层 public static void main(String[] args) { File file new File(./test); System.out.println(是否存在test file.exists()); file.mkdir(); System.out.println(是否存在test file.exists()); } }创建多层目录public class Demo { //创建多层目录 public static void main(String[] args) { File file new File(./aaa/ppp/lll); System.out.println(是否存在目录: file.exists()); file.mkdirs(); System.out.println(是否存在目录 file.exists()); } }16.重命名也是复制粘贴操作 ---- renameTo(本质其实就是将原来文件替换为另有一个文件)public class Demo { public static void main(String[] args) throws IOException { File file new File(./test.txt); //创建文件 file.createNewFile(); File dest new File(./test001.txt); file.renameTo(dest);//将源目标file替换为dest目标文件 } }文件内容操作对于文件内容操作有俩种1.读把文件的内容获取出来2.写对文件内容进行修改操作系统也提供了api给我们进行获取调用Java针对操作系统的api也进行一定的封装让我们使用起来更加方便 --- 流对象而在Java在标准库中又分为俩类1.字节流读写的时候以字节为单位进行读写 ---- 适合二进制文件2.字符流读写的时候以字符为单位进行读写 ---- 适合文本文件字节流InputStream读 OutputStream写但是他们这俩个类都是抽象类需要使用他们的父类FileInputStream读FileOutputStream写字符流Read读 Write写这俩个类同样也是抽象类也是需要使用他们的父类FileRead读FileWrite写读操作使用字节流使用版本一的read方法进行读取 --- 但是每次都需要通过read从硬盘中读取数据比较耗时public class Demo6 { //读操作 --- InputStream public static void main1(String[] args) throws IOException { //创建流对象创建流对象的时候就自动打开文件了 InputStream inputStream new FileInputStream(./test.txt); //使用版本一的read方法进行读取1 --- 但是每次都需要通过read从硬盘中读取数据比较耗时 while(true) { //每次往硬盘中读取信息,当读道文件末尾会返回-1 int n inputStream.read(); if(n -1) { //说明读取到文件末尾结束循环 break; } //使用十六进制打印字节 System.out.printf(%x\n, n); } } }使用版本二read方法进行读取 --- 一次性读取文本数据存放到数组中public class Demo6 { //读操作 --- InputStream public static void main1(String[] args) throws IOException { //创建流对象创建流对象的时候就自动打开文件了 InputStream inputStream new FileInputStream(./test.txt); while(true) { //如果文本数据很大超过1024一次可能读取不完所以就需要通过while循环分多次读取 byte[] b new byte[1024]; int n inputStream.read(b); if(n -1) { //说明读取到文件末尾 break; } //遍历数组 for(int i 0; i n; i) { System.out.printf(%x\n, b[i]); } } } }使用try with resources --- 括号内需要写有关Closeable的接口后续当try执行完毕或者捕获异常也会自动调用close方法public class Demo6 { //读操作 --- InputStream public static void main1(String[] args) throws IOException { try(InputStream inputStream new FileInputStream(./test.txt)) { while(true) { byte[] b new byte[1024]; int n inputStream.read(b); if(n -1) { //读取到文件末尾 break; } for(int i 0; i n; i) { System.out.printf(%x\n, b[i]); } } }catch(IOException e) { e.printStackTrace(); } } }读操作使用字符流一次读取一个字符public static void main2(String[] args) { try(Reader reader new FileReader(./test.txt)) { //一次读取一个字符 while(true) { int n reader.read(); if(n -1) { //说明读到文本末尾 break; } char ch (char)n;//字符转换 System.out.print(ch); } } }一次读取多个字符public static void main2(String[] args) { try(Reader reader new FileReader(./test.txt)) { while(true) { char[] chars new char[1024]; int n reader.read(chars); if(n -1) { break; } for(int i 0; i n; i) { System.out.print(chars[i]); } } }catch (IOException e) { e.printStackTrace(); } } }写操作使用字节流每次使用wirte写入----每次写入都需要访问硬盘public static void main1(String[] args) { try (OutputStream outputStream new FileOutputStream(./test.txt,true)) { //每次写入使用write outputStream.write(65); outputStream.write(66); outputStream.write(67); outputStream.write(68); }通过字节数组一次性写入减少访问硬盘次数提高效率public static void main1(String[] args) { try (OutputStream outputStream new FileOutputStream(./test.txt,true)) { //通过字节数组一次写入数组内容即可不需要多次write去访问硬盘写入 byte[] bytes {70,71,72,73}; outputStream.write(bytes); }catch (IOException e) { e.printStackTrace(); } }写操作使用字符流public static void main(String[] args) { try(Writer writer new FileWriter(./test.txt)) { //以字符串形式写入 writer.write(你好呀~~~); }catch(IOException e) { e.printStackTrace(); } }写一个实际的例子例子一给定一个指定目录并提供关键词找到目录中包含关键词的文件名public class Demo { public static void main(String[] args) throws IOException { Scanner scanner new Scanner(System.in); //让用户输入一个路径 System.out.print(请输入一个路径); String rootPath scanner.next(); //再让用户输入关键词 System.out.print(请输入一个关键词); String key scanner.next(); //判断关键词是否为空 if(key.isEmpty()) { System.out.println(非法的关键词~~~); return; } //判断路径是否为有效路径 --- 不能为空也不能为普通文件 File rootFile new File(rootPath); if(!rootFile.isDirectory()) { System.out.println(违法路径~~~~); return; } //搜索路径 search(rootFile, key); } public static void search(File rootFile, String key) throws IOException { File[] files rootFile.listFiles(); //判定files是否为空 if(files null) { return; } for(File file : files) { if(file.isDirectory()) { //如果还是一个目录那么就重新递归一下 search(file, key); }else if(file.isFile()) { //如果是一个文件那么查看文件名是否包含在这个文件中 //判断key是否包含在这个文件中 if(file.getName().contains(key)) { //如果包含那么询问 Scanner scanner new Scanner(System.in); System.out.print(文件路径为 file.getCanonicalPath()); System.out.print(请问是否删除该文件Y/N); String ret scanner.next(); if(ret.equals(Y) || ret.equals(y)) { file.delete(); System.out.println(删除成功); }else { System.out.println(取消删除); } } }else { //程序是不会走到这里的所以暂时不处理 } } } }例子二文件复制public class Demo { public static void main(String[] args) { Scanner scanner new Scanner(System.in); System.out.print(请输入你要复制的文件的路径); String src scanner.next(); System.out.print(请输入要复制到的位置); String dest scanner.next(); //判断输入的复制文件的路径是否合法 File srcFile new File(src); if(!srcFile.isFile()) { System.out.println(要复制文件的路径是一个非法路径); return; } File destFile new File(dest); File destParent destFile.getParentFile();//拿到想要复制到文件目的地的地方查看他的父目录是否是一个目录防止复制到一个文件夹中 if(!destParent.isDirectory()) { System.out.println(复制到位置的路径是一个非法目录路径); return; } try(InputStream inputStream new FileInputStream(srcFile); OutputStream outputStream new FileOutputStream(destFile)) { //读取文件内容写入到bytes数组中 while(true) { byte[] bytes new byte[1024]; int n inputStream.read(bytes); if(n -1) { break; } //写入 outputStream.write(bytes, 0, n); } }catch(IOException e) { e.printStackTrace(); } } }

相关文章:

文件IO操作详解

这篇文章我将总结关于文件IO的一些概念的东西和关于文件IO类的使用1.认识路径2.文件类型3.文件系统操作4.文件内容操作认识路径路径也是一个目录结构,是一颗目录树(N叉搜索树)~~~绝对路径:E:\JavaCode\文件IO我们在文件夹中&#…...

Phi-4-reasoning-vision-15B多场景落地:从办公文档处理到工业质检界面分析

Phi-4-reasoning-vision-15B多场景落地:从办公文档处理到工业质检界面分析 1. 引言:当AI学会“看图说话”与“看图思考” 想象一下,你手头有一份复杂的财务报表PDF,里面全是密密麻麻的数字和图表,你需要快速提取关键…...

GEO优化源码系统能做什么?五大核心功能模块及其应用场景详解

温馨提示:文末有资源获取方式AI新时代,流量入口已发生结构性迁移。当潜在客户在DeepSeek、豆包等AI中询问“哪个品牌更好”时,GEO(生成引擎优化) 就是让你的企业品牌和产品出现在AI结果中的唯一路径。市面上的GEO软件动…...

cv_unet_image-colorization精彩案例:抗战史料黑白照片智能上色成果

cv_unet_image-colorization精彩案例:抗战史料黑白照片智能上色成果 1. 项目简介与核心价值 黑白照片承载着历史的重量,但色彩的缺失也让许多珍贵的瞬间显得遥远而模糊。想象一下,你手中有一张祖辈在抗战时期的合影,照片中的人物…...

Zerobrew garbage collect深度解析:释放磁盘空间的高效方法

Zerobrew garbage collect深度解析:释放磁盘空间的高效方法 【免费下载链接】zerobrew A drop-in, 5-20x faster, Rust-based experimental Homebrew alternative 项目地址: https://gitcode.com/gh_mirrors/ze/zerobrew Zerobrew作为一款基于Rust开发的Home…...

nlp_gte_sentence-embedding_chinese-large实战教程:余弦相似度阈值调优与业务适配

nlp_gte_sentence-embedding_chinese-large实战教程:余弦相似度阈值调优与业务适配 你是不是遇到过这样的问题?用文本向量模型做语义搜索,明明感觉两段话意思差不多,但模型给的相似度分数就是不高,导致该搜到的没搜到…...

Chord高清视频理解案例:1080P视频边界框定位精度实测报告

Chord高清视频理解案例:1080P视频边界框定位精度实测报告 1. 引言:当AI学会“看”视频 想象一下,你有一段30秒的短视频,里面有一只猫从沙发跳到茶几上。现在,你需要知道: 这只猫在视频的哪几秒出现了&am…...

Realistic Vision V5.1部署案例:Windows/Linux双平台Streamlit界面配置详解

Realistic Vision V5.1部署案例:Windows/Linux双平台Streamlit界面配置详解 想在自己的电脑上体验专业级的写实人像摄影,但又觉得本地部署AI模型太复杂?今天,我们就来手把手教你,如何在Windows和Linux系统上&#xff…...

RexUniNLU真实作品:某银行季度财报摘要的自动事件抽取与风险点标注

RexUniNLU真实作品:某银行季度财报摘要的自动事件抽取与风险点标注 1. 引言:当财报分析遇上AI 想象一下,你是一家投资机构的研究员,每天需要阅读几十份、上百页的上市公司财报。你的任务是快速从中找出关键事件:利润…...

Bidili Generator入门必看:SDXL 1.0底座与LoRA权重协同原理

Bidili Generator入门必看:SDXL 1.0底座与LoRA权重协同原理 你是不是也遇到过这样的问题:好不容易找到一个喜欢的AI绘画风格模型(LoRA),兴冲冲地下载下来,结果发现它和你的SDXL大模型“水土不服”&#xf…...

工业组态 × 数据大屏 × ThingsBoard:SceneV 数据大屏可视化

用 Meta2D 打造工业级数据大屏:SceneV 今天要为大家介绍一个基于 Meta2D 框架构建的开源前端可视化项目——SceneV,它是一个功能强大、高度可定制的低代码/无代码数据大屏设计器,特别适合与 ThingsBoard 物联网平台对接,实现工业…...

开源轻量影像工具:Jimeng AI Studio (Z-Image Edition)镜像免配置部署指南

开源轻量影像工具:Jimeng AI Studio (Z-Image Edition)镜像免配置部署指南 想快速上手一个功能强大、界面清爽的AI绘画工具,但又不想折腾复杂的模型下载和环境配置?今天要介绍的Jimeng AI Studio (Z-Image Edition)镜像,或许就是…...

Janus-Pro-7B快速上手:无需GPU环境也能跑通的开源多模态模型

Janus-Pro-7B快速上手:无需GPU环境也能跑通的开源多模态模型 1. 开篇:认识这个强大的多模态模型 如果你正在寻找一个既能看懂图片又能生成内容的多模态AI模型,而且希望不需要昂贵的GPU就能运行,那么Janus-Pro-7B绝对值得你关注。…...

java里内存、GC、性能调优的常用方法

内存调优: 内存泄漏(memory leak):在Java中如果不再使用一个对象,但是该对象依然在GC ROOT的引用链上,这 个对象就不会被垃圾回收器回收,这种情况就称之为内存泄漏。 常见的GC ROOT 线程栈里的局…...

PYSKL未来路线图:探索骨架动作识别的终极功能与创新算法

PYSKL未来路线图:探索骨架动作识别的终极功能与创新算法 【免费下载链接】pyskl A toolbox for skeleton-based action recognition. 项目地址: https://gitcode.com/gh_mirrors/py/pyskl PYSKL作为一款专注于骨架动作识别的工具库,正不断进化以满…...

Android开发者必备:cube-sdk高级特性与性能优化指南

Android开发者必备:cube-sdk高级特性与性能优化指南 【免费下载链接】cube-sdk A light package for Android development, it handles loading image and network request. 项目地址: https://gitcode.com/gh_mirrors/cu/cube-sdk cube-sdk是一款轻量级Andr…...

10个实用Skylark内置函数:提升你的配置脚本效率

10个实用Skylark内置函数:提升你的配置脚本效率 【免费下载链接】skylark Skylark in Go: the Skylark configuration language, implemented in Go [MOVED to go.starlark.net] 项目地址: https://gitcode.com/gh_mirrors/sk/skylark Skylark是一种高效的配…...

Alipay Easy SDK安全机制详解:自动加签验签与证书管理最佳实践

Alipay Easy SDK安全机制详解:自动加签验签与证书管理最佳实践 【免费下载链接】alipay-easysdk Alipay Easy SDK for multi-language(java、c#、php、ts etc.) allows you to enjoy a minimalist programming experience and quickly access the various high-freq…...

claude-code-best-practice版本控制:管理AI辅助开发项目的完整指南

claude-code-best-practice版本控制:管理AI辅助开发项目的完整指南 【免费下载链接】claude-code-best-practice practice made claude perfect 项目地址: https://gitcode.com/GitHub_Trending/cl/claude-code-best-practice claude-code-best-practice是一…...

Crinkler核心功能解析:上下文建模压缩如何实现极致压缩比

Crinkler核心功能解析:上下文建模压缩如何实现极致压缩比 【免费下载链接】Crinkler Crinkler is an executable file compressor (or rather, a compressing linker) for compressing small 32-bit Windows demoscene executables. As of 2020, it is the most wid…...

PyQt-SiliconUI开源社区指南:贡献代码与获取支持的完整路径

PyQt-SiliconUI开源社区指南:贡献代码与获取支持的完整路径 【免费下载链接】PyQt-SiliconUI A powerful and artistic UI library based on PyQt5 / PySide6,基于PyQt5 / PySide6的UI框架,灵动、优雅而轻便 项目地址: https://gitcode.com…...

从0到1:用Topit提升Mac生产力的10个实用场景

从0到1:用Topit提升Mac生产力的10个实用场景 【免费下载链接】Topit Pin any window to the top of your screen / 在Mac上将你的任何窗口强制置顶 项目地址: https://gitcode.com/gh_mirrors/to/Topit Topit是一款专为Mac用户设计的窗口置顶工具&#xff0c…...

【MySQL】事务:ACID 特性

原子性(atomicity):原子性是指事务是一个不可分割的工作单位,要么全部提交,要么全部失败回滚。即要么转账成功,要么转账失败,是不存在中间的状态。如果无法保证原子性会怎么样?就会出现数据不一…...

从gh_mirrors/aw/awesome-quincy-larson-emails看编程教育趋势:Quincy Larson的每周洞察

从gh_mirrors/aw/awesome-quincy-larson-emails看编程教育趋势:Quincy Larson的每周洞察 【免费下载链接】awesome-quincy-larson-emails This repository is an archive of emails that are sent by the awesome Quincy Larson every week. 项目地址: https://gi…...

claude-code-best-practice分布式系统:构建高可用分布式应用的AI辅助策略

claude-code-best-practice分布式系统:构建高可用分布式应用的AI辅助策略 【免费下载链接】claude-code-best-practice practice made claude perfect 项目地址: https://gitcode.com/GitHub_Trending/cl/claude-code-best-practice claude-code-best-practi…...

Oga性能优化指南:提升Ruby XML/HTML解析速度的秘诀

Oga性能优化指南:提升Ruby XML/HTML解析速度的秘诀 【免费下载链接】oga Oga is an XML/HTML parser written in Ruby. 项目地址: https://gitcode.com/gh_mirrors/og/oga Oga是一款用Ruby编写的高性能XML/HTML解析器,以其出色的解析能力和优化的…...

GPTs提示词泄露与防护:Awesome AI GPTs安全指南

GPTs提示词泄露与防护:Awesome AI GPTs安全指南 【免费下载链接】Awesome-AI-GPTs Awesome AI GPTs, OpenAI GPTs, GPT-4, ChatGPT, GPTs, Prompts, plugins, Prompts leaking 项目地址: https://gitcode.com/gh_mirrors/aw/Awesome-AI-GPTs 随着AI技术的快速…...

开发者视角:Terraform Provider Dominos 的设计理念与实现原理

开发者视角:Terraform Provider Dominos 的设计理念与实现原理 【免费下载链接】terraform-provider-dominos The Terraform plugin for the Dominos Pizza provider. 项目地址: https://gitcode.com/gh_mirrors/te/terraform-provider-dominos Terraform Pr…...

Beeftext完全指南:Windows终极文本片段工具,让输入效率提升10倍

Beeftext完全指南:Windows终极文本片段工具,让输入效率提升10倍 【免费下载链接】Beeftext A text snippet tool for Windows. 项目地址: https://gitcode.com/gh_mirrors/be/Beeftext Beeftext是一款专为Windows设计的文本片段工具,能…...

Qwen3-ASR-1.7B企业实操:ASR结果接入Elasticsearch构建语音检索库

Qwen3-ASR-1.7B企业实操:ASR结果接入Elasticsearch构建语音检索库 1. 引言:语音数据检索的挑战与解决方案 语音数据正在成为企业重要的数字资产,从会议录音、客服通话到培训讲座,每天都会产生大量语音内容。但这些数据如果只是简…...