Java文件流操作

一、文件创建和删除

   public static void main(String[] args) throws IOException {File file = new File("..\\hello-world.txt");//..表示在上机目录下创建hello-world.txtSystem.out.println(file.getPath());//返回当前相对路径System.out.println(file.getCanonicalFile());//返回绝对路径System.out.println(file.exists());//false//创建文件boolean re=file.createNewFile();System.out.println(re);System.out.println(file.exists());//true//删除文件System.out.println(file.exists());//trueboolean se=file.delete();System.out.println(file.exists());//false}

二、文件读写分类(重点讨论)

文件大多数是二进制保存的,当然也有以保存字符的文本文件,当我们读写文件的时候,我们需要针对这两种文件类型有不同操作,针对二进制的文件我们叫字节流,也就是每次读写一个字节,针对文本文件我们读写操作叫字符流,每次读取多个字节,这里多个字节没有准确几个字节,GBK每个中文字符有两个字节,UTF8每个中文字符是三个字节

 三、测试环境

 描述:Test目录下创建了两个目录,aaa和bbb,这个两个目录下分别创建文件111和222

四、字符流操作

 1、读操作

··方法一 

public class Test_Read {public static void main(String[] args) throws IOException {Reader reader=new FileReader("e:/Test/aaa/111.txt");while (true){int x=reader.read();if(x==-1){//读取完毕break;}char y=(char)x;//一个中文字符一个中文字符读取System.out.print(y+" ");}}
}

描述:用read方法一个中文字符一个中文字符读取但是read方法返回的是一个整数,如果是-1说明为文件空读取结束,不为空传为字符输出。 

 ··方法二

public class Test_Read_Array {public static void main(String[] args) throws IOException {Reader reader=new FileReader("e:/Test/aaa/111.txt");while (true){char[] array=new char[2];int n=reader.read(array);//每次只读取两个中文字符,并且打印,多次读取if(n==-1){//读取完毕break;}System.out.println("n="+n);for (int i=0;i<n;i++) {System.out.print(array[i]);}System.out.println();}}
}

 文件资源泄露问题(重点)

你有没有发现上述代码存在致命问题!!!,在while循环里面我们频繁的下创建reader对象,这会填满文件资源表,文件资源表一旦填满那么我们在想操作该文件将会失败,所以我们应该及时关闭我们创建的对象,以读取对象为例修改:

public class Test_Read_Array {public static void main(String[] args) throws IOException {//try()中的资源会随着try结束而释放try ( Reader reader=new FileReader("e:/Test/aaa/111.txt");){while (true){char[] array=new char[2];int n=reader.read(array);//每次只读取两个中文字符,并且打印,多次读取if(n==-1){//读取完毕break;}System.out.println("n="+n);for (int i=0;i<n;i++) {System.out.print(array[i]);}System.out.println();}}}
}

这只是一种简单写法,当然你可以在try后面用finally配合read.close(),同样可以 ,我们下面的代码将会采用这种简便的写法

2、写操作

public class Test_Write {public static void main(String[] args) {//文件路径后面不加true默认是false会覆盖原来文件内容,加了true是在原来文件内容后添加新内容try(Writer writer=new FileWriter("e:/Test/aaa/111.txt",true)){//写入数据writer.write("我看到了");} catch (IOException e) {throw new RuntimeException(e);}}
}

五、字节流操作 

1、读操作

public class Test_Read {//字节流读操作public static void main(String[] args) throws IOException {try(InputStream inputStream=new FileInputStream("E:/Test/bbb/222.txt")){//开始读取文件Scanner scanner=new Scanner(inputStream);String s=scanner.next();System.out.println(s);}}
}

2、写操作 

public class Test_Write {public static void main(String[] args) throws FileNotFoundException {try(OutputStream outputStream=new FileOutputStream("E:/Test/bbb/222.txt")){PrintWriter writer=new  PrintWriter(outputStream);writer.printf("我知道了");} catch (IOException e) {throw new RuntimeException(e);}}
}

 

啊?非但没有写入而且原来的数据害消失了!!! 

这是因为缓冲区问题,所谓缓冲区问题就是,我们这个写的操作实际上是先写入缓存区,缓存区的数据到达一定数量后在写进硬盘,所以我们现在要直接把缓冲区的内容写进硬盘就可以了

public class Test_Write {public static void main(String[] args) throws FileNotFoundException {try(OutputStream outputStream=new FileOutputStream("E:/Test/bbb/222.txt")){PrintWriter writer=new  PrintWriter(outputStream);writer.printf("我知道了",true);writer.flush();} catch (IOException e) {throw new RuntimeException(e);}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/797205.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue项目 设置浏览器地址栏图标及名称

在vue项目中&#xff0c;怎样设置浏览器tab图标及名称呢&#xff1f; 方案一 1.静态配置vue项目ico 1.1将需要展示的ico放到项目文件中 1.2在项目根目录public文件中的index.html添加如下代码 <link rel"icon" href"<% BASE_URL %>favicon.ico"…

Java 组合模式

Java设计模式 - 组合模式 组合模式是结构型模式&#xff0c;因为它创建了一组对象的树结构。 组合模式将一组对象视为单个对象。 组合模式使用一个类来表示树结构。 在组合模式中&#xff0c;我们创建一个包含自己对象的类的组。 例子 以下代码使用Employee类来演示组合模…

(学习日记)2024.04.03:UCOSIII第三十一节:信号量函数接口讲解

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

c++的学习之路:13、vector(2)

本章主要是模拟实现vector&#xff0c;文章末附上代码&#xff0c;和源码。 目录 一、STL源码 二、构造与析构 三、迭代器与【】、size、capacity、empty 四、reserve与resize 五、push_back与pop_back 六、insert与erase 七、测试 1 八、代码 九、思维导图 一、STL源…

FJSP:蜣螂优化算法( Dung beetle optimizer, DBO)求解柔性作业车间调度问题(FJSP),提供MATLAB代码

一、柔性作业车间调度问题 柔性作业车间调度问题&#xff08;Flexible Job Shop Scheduling Problem&#xff0c;FJSP&#xff09;&#xff0c;是一种经典的组合优化问题。在FJSP问题中&#xff0c;有多个作业需要在多个机器上进行加工&#xff0c;每个作业由一系列工序组成&a…

2024.4.3-day08-CSS 盒子模型(溢出显示、伪元素)

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 作业 2024.4.3-学习笔记css溢出显示单行文本溢出显示省略号多行文本溢出显示省…

多态.Java

&#xff08;1&#xff09;什么是多态&#xff1f; 同类型的对象&#xff0c;表现出不同的形态。前者指父类&#xff0c;后者指不同的子类 说简单点&#xff0c;就是父类的同一种方法&#xff0c;可以在不同子类中表现出不同的状态&#xff0c;或者说在不同子类中可以实现不同…

10.java openCV4.x 入门-特殊的Mat类汇总(二)

专栏简介 &#x1f492;个人主页 &#x1f4f0;专栏目录 点击上方查看更多内容 &#x1f4d6;心灵鸡汤&#x1f4d6;我们唯一拥有的就是今天&#xff0c;唯一能把握的也是今天建议把本文当作笔记来看&#xff0c;据说专栏目录里面有相应视频&#x1f92b; &#x1f9ed;文…

Linux 常用指令及其理论知识

个人主页&#xff1a;仍有未知等待探索-CSDN博客 专题分栏&#xff1a;http://t.csdnimg.cn/Tvyou 欢迎各位指教&#xff01;&#xff01;&#xff01; 目录 一、理论知识 二、基础指令 1、ls指令&#xff08;列出该目录下的所有子目录和文件&#xff09; 语法&#xff1a; …

论文阅读——Sat2Vid

Sat2Vid: Street-view Panoramic Video Synthesis from a Single Satellite Image 提出了一种新颖的方法&#xff0c;用于从单个卫星图像和摄像机轨迹合成时间和几何一致的街景全景视频。 即根据单个卫星图像和给定的观看位置尽可能真实地、尽可能一致地合成街景全景视频序列。…

Docker中Mysql报 mbind: Operation not permitted

问题 我们在docker中安装的mysql运行时报 mbind: Operation not permitted mbind: Operation not permitted mbind: Operation not permitted mbind: Operation not permitted mbind: Operation not permitted mbind: Operation not permitted原因 这是Docker的Seccomp安全限…

[leetcode] 25. K 个一组翻转链表

给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。 k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍&#xff0c;那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改变节点内部的值…

最好用的安卓按钮(3)

属性解释 按钮文字 app:text“床前明月光” 按钮文字颜色 app:textColor“color/color_white” 按钮文字大小 app:textSize“22sp” 按钮背景颜色 app:color_normal“color/color_accent” 0x2 单独设置每个圆角 效果 代码 <top.androidman.SuperButton android:layo…

替换空格(替换特定字符)

&#x1f600;前言 在字符串处理中&#xff0c;经常会遇到需要替换特定字符的情况。本文将介绍一道经典的字符串替换问题&#xff1a;将字符串中的空格替换成 “%20”。我们将探讨一种高效的解决方法&#xff0c;通过倒序遍历字符串来实现原地替换&#xff0c;避免额外空间的开…

基于单片机分舱式电开水炉位控制系统

**单片机设计介绍&#xff0c;基于单片机分舱式电开水炉位控制系统 文章目录 一 概要二、功能设计三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机分舱式电开水炉位控制系统概要主要涉及通过单片机对电开水炉的各个舱位进行精确控制&#xff0c;实现水位、温度…

【热门话题】Stable Diffusion:本地部署教程

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 Stable Diffusion&#xff1a;本地部署教程一、引言二、环境准备1. 硬件配置2. …

springboot项目框架讲解

文章目录 1.项目文件结构2.数据库连接信息3.其他配置信息4.java代码文件目录介绍5.entity层代码6.controller&#xff0c;service&#xff0c;dao&#xff0c;entity层之间的关系7.controller层代码8.登陆拦截功能实现9.文件上传功能 1.项目文件结构 2.数据库连接信息 3.其他配…

ETL中如何自定义规则

一、ETL中的规则 在使用规则之前我们先来了解一下什么是规则&#xff0c;ETL中规则在很多组件中都能看见&#xff0c;可以理解为按照事前约定好的逻辑去执行&#xff0c;规则可以使得数据更加的规范统一&#xff0c;同时也不需要去纵向的修改底层代码&#xff0c;只需要动态编…

【Frida】【Android】 工具篇:查壳工具大赏

&#x1f6eb; 系列文章导航 【Frida】【Android】01_手把手教你环境搭建 https://blog.csdn.net/kinghzking/article/details/136986950【Frida】【Android】02_JAVA层HOOK https://blog.csdn.net/kinghzking/article/details/137008446【Frida】【Android】03_RPC https://bl…

LiveGBS流媒体平台GB/T28181常见问题-系统服务日志如何配置日志个数日志路径日志时长web操作日志操如何配置保留天数及过滤

LiveGBS系统服务日志如何配置日志个数日志路径日志时长web操作日志操如何配置保留天数及过滤 1、系统服务日志1.1、日志目录1.2、配置日志文件个数及记录时间1.3、配置日志文件路径 2、Web 操作日志2.1、配置保留天数2.2、配置不记录操作日志2.1.1、不记录所有2.1.2、不记录指定…