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"…

联邦学习目前面临的挑战以及解决方案

学习目标&#xff1a; 联邦学习目前面临的挑战以及解决方案 学习内容&#xff1a; 联邦学习是一种新兴的人工智能基础技术&#xff0c;它在保障大数据交换时的信息安全、保护终端数据和个人数据隐私、保证合法合规的前提下&#xff0c;在多参与方或多计算结点之间开展高效率的…

224.0.0.1到224.0.0.9的IP地址

224.0.0.1到224.0.0.9的IP地址属于D类组播地址&#xff0c;具体含义如下&#xff1a; 224.0.0.1&#xff1a;代表本子网中的所有系统&#xff08;All Systems on this Subnet&#xff09;&#xff0c;用于向该子网上的所有主机包括路由器发送信息。224.0.0.2&#xff1a;代表本…

什么是TLB

TLB&#xff0c;全称为Translation Lookaside Buffer&#xff0c;即旁路转换缓冲或地址转换后备缓冲&#xff0c;用于加速虚拟地址到物理地址的转换过程。它是访问速度比内存快很多的高速缓存&#xff0c;用于存放最近访问的页表项的副本。在现代计算机系统中&#xff0c;使用虚…

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;或者说在不同子类中可以实现不同…

UVA247 Calling Circles 解题报告

UVA247 Calling Circles 解题报告 题目链接 https://vjudge.net/problem/UVA-247 题目大意 如果两个人相互打电话&#xff08;直接或间接&#xff09;&#xff0c;则说他们在同一个电话圈里。例如&#xff0c;a打给b&#xff0c;b打给c&#xff0c;c打给d&#xff0c;d打给a…

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

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

原型设计模式的学习

哪位大佬帮我看看关于“原型设计模式”的问题 写作原因&#xff1a; 我需要了解原型模式&#xff0c;但网上的说法是&#xff1a;通过一个clone方法来创建对象。然而&#xff0c;这并没有解答关于“效率”的问题&#xff1a; 以下是以怪物游戏和深拷贝为例来说明的&#xff1a;…

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;那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改变节点内部的值…

MySQL(目录)

作者&#xff1a;码农出击 链接&#xff1a;https://www.zhihu.com/question/632989513/answer/3312494291 来源&#xff1a;知乎 著作权归作者所有。 MySQL数据库&#xff08;7天~15天&#xff09; 1、数据存储引擎&#xff1a;InnoDB、myISAM、Memory 2、数据库索引类型及原…

最好用的安卓按钮(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;避免额外空间的开…