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

文件IOoooo

1.1 文件路径

文件路径分为两种:

1、绝对路径:以C:、D:等盘符开头的,就是我们所说的绝对路径,根据它可以直接找到文件的具体位置。

2、相对路径:需要先指定一个目录作为基准目录,从基准目录出发,看看按照什么样的路径寻找能找到指定文件,这就是相对路径;相对路径通常是以.(当前目录)或者..(当前目录的上级目录)开头的。

1.2 文件类型

常见的文件类型分为两种:

1、文本文件:文件中保存的内容都是字符串,保存的都是合法的内容,简单来说就是打开之后我们能看懂,不是乱码。

2、二进制文件:文件中保存的内容是二进制数据,不要求保存合法的内容,打开文件之后看到一堆乱码就是这种情况。

1.3 文件操作

在Java中,通常通过java.io.file来描述一个文件。

文件的构造方法通常为:File(String pathname)

对文件操作的方法通常有以下几种:

File file = new File("d://text.txt");//构造文件,参数为文件的路径
System.out.println(file.getParent());//返回该文件的父目录文件路径
System.out.println(file.getName());//返回该文件的纯文件名称
System.out.println(file.getPath());//返回该文件的路径
System.out.println(file.getAbsolutePath());//返回该文件的绝对路径
System.out.println(file.getCanonicalPath());//返回修饰过的绝对路径

 

File f = new File("d:/text.txt");
System.out.println(f.exists());//判断文件是否存在
System.out.println(f.isDirectory());//判断文件是否是一个目录
System.out.println(f.isFile());//判断文件是否为一个普通文件
System.out.println(f.createNewFile());//如果文件不存在,则创建一个新的文件
System.out.println(f.exists());
System.out.println(f.delete());//删除文件
System.out.println(f.exists());

1.4 文件内容的读写

对于文件内容的读写分为字节流和字符流两种类型,下面我们进行分别介绍。

1.4.1 字符流

1、reader(读文件)

2、writer(写文件)

File file = new File("d:/test.txt");
System.out.println(file.exists());
Writer writer = new FileWriter("d:/test.txt");//构造一个写文件对象
writer.write("我在学习文件io");//向文件中写内容
writer.close();//关闭文件
Reader reader = new FileReader("d:/test.txt");//构造一个读文件对象
while(true){//设置循环的目的是因为文件的内容很多,得读很多次,直到读完int a = reader.read();//read方法返回的是一个int类型的数据if(a == -1){//当数字的值为-1时,代表文件已经读完,直接结束循环break;}else{char c = (char)a;//将整型强制转换为字符型System.out.println(c);//输出字符}
}
reader.close();//关闭文件Reader reader1 = new FileReader("d:/test.txt");
char[] cbuf = new char[1024];//构造一个字符数组用来存储读出的内容
int n = reader1.read(cbuf);//设置参数,此时每次读都会读一个数组的大小,返回内容字符数
for (int i = 0;i < n;i++){System.out.print(cbuf[i]);//输出数组中的内容
}
reader1.close();//关闭文件

 

注意:一定要记得关闭文件,否则会使文件资源泄露,类似于内存资源泄露,时间长了可能会出现意想不到的错误!!!

1.4.2 字节流

1、InputStream(读文件)

2、OutputStream(写文件)

File file = new File("d:/test.txt");
System.out.println(file.exists());
InputStream inputStream = new FileInputStream("d:/test.txt");//构造输入字符流对象
while(true){//类似字符流读方法,不断循环读取数据int a = inputStream.read();if(a == -1){break;}else{char c = (char)a;System.out.println(c);}
}Scanner scanner = new Scanner(inputStream,"UTF-8")//读出特定格式的数据
while(scanner.hasNext()){String s = scanner.next();System.out.println(s);
}inputStream.close();

 

File file = new File("d:/test.txt");
OutputStream outputStream = new FileOutputStream("d:/test.txt");
outputStream.write('H');
outputStream.write('e');
outputStream.write('l');
outputStream.write('l');
outputStream.write('o');
outputStream.flush();//此处要对缓冲区进行刷新,将缓冲区中的数据立即写入到硬盘中
outputStream.close();

1.5 小工具demo

public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入要扫描的根目录");String rootDirpath = scanner.next();File file = new File(rootDirpath);if(!file.isDirectory()){System.out.println("您输入的目录不存在或者不是目录,退出");return;}System.out.println("请输入要找出的文件名中包含的字符");String token = scanner.next();scanDir(file,token);
}private static void scanDir(File file, String token) {File[] files = file.listFiles();if(files == null){return;}for(File f : files){System.out.println("当前扫描的文件" + f.getAbsolutePath());if(f.isFile()){checkDelete(f,token);}else{scanDir(f,token);}}
}private static void checkDelete(File f, String token) {if(!f.getName().contains(token)){return;}System.out.println("当前文件为" + f.getAbsolutePath() + "请确认是否要删除(y/n)");Scanner scanner = new Scanner(System.in);String choice = scanner.next();if(choice.equals("Y") || choice.equals("y")){f.delete();System.out.println("删除完毕");}else{System.out.println("取消删除");}

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 计算机网络 —— 数据链路层(以太网)
  • adb 脚本化Android系统截图和录屏
  • Python的Pillow(图像处理库)非常详细的学习笔记
  • 【HarmonyOS】鸿蒙应用子模块module资源如何获取
  • 【人工智能】ChatGPT基本工作原理
  • 【C语言】一篇带你高强度解析精通 字符串函数和内存函数 (万字总结大全,含思维导图)(建议收藏!!!)
  • qt qDebug兼容LOGE
  • Hive的安装与配置
  • 十二 nginx中location重写和匹配规则
  • 《科技与金融》是什么级别的期刊?是正规期刊吗?能评职称吗?
  • 移动机器人解决方案-MRC5000控制系统无人清扫车
  • oracle10g的dataguard测试
  • 第一章 - 第6节- 数制转换 - 课件
  • PHARPS32000000控制器模块可议价
  • Apache OFBiz 路径遍历导致RCE漏洞复现(CVE-2024-36104)
  • 03Go 类型总结
  • export和import的用法总结
  • learning koa2.x
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Redis的resp协议
  • Spring Boot MyBatis配置多种数据库
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 构建二叉树进行数值数组的去重及优化
  • 构建工具 - 收藏集 - 掘金
  • 记录一下第一次使用npm
  • 深入 Nginx 之配置篇
  • 学习笔记TF060:图像语音结合,看图说话
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • ​VRRP 虚拟路由冗余协议(华为)
  • ###C语言程序设计-----C语言学习(3)#
  • (2)空速传感器
  • (33)STM32——485实验笔记
  • (7)STL算法之交换赋值
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (SpringBoot)第七章:SpringBoot日志文件
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (二)丶RabbitMQ的六大核心
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (四)事件系统
  • (四)图像的%2线性拉伸
  • (一)WLAN定义和基本架构转
  • (转)ORM
  • .NET C# 使用 iText 生成PDF
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .NET Framework 3.5安装教程
  • .NET Framework与.NET Framework SDK有什么不同?
  • .NET WPF 抖动动画
  • .net 程序发生了一个不可捕获的异常
  • .NET导入Excel数据
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • :=
  • @RequestMapping 的作用是什么?
  • [ Python ]使用Charles对Python程序发出的Get与Post请求抓包-解决Python程序报错问题