Java IO流(详解)

目录

1.概述

2.File文件类

2.1 文件的创建操作

2.2 文件的查找操作

3. File里面一些其他方法

3.1 经典案例

4. IO流

4.1 概念

4.2 IO分类

4.3 字节输出流

4.4 字节输入流

4.5 案例

4.6 字符输出流

4.7 字符输入流

4.8 案例

4.9 处理流--缓冲流

4.10 对象流:


1.概述

在学习io流之前,我们需要先学习File文件类。因为它只能对文件进行操作,但是无法对文件中的内容进行操作

2.File文件类

在java jdk关于对文件(目录和文件)的操作都封装到File类。该类中包含了文件的各种属性以及操作方法。该类放在jdk-java.io包下。

2.1 文件的创建操作

 public static void main(String[] args) throws IOException {
//        //创建一个文件对象--参数文件的路径--绝对路径和相对路径
//        File file=new File("D:\\qy174.txt");
//        //相对路径--当前工程
//        File file02=new File("qy174.txt");
//        //调用创建功能--文件
//        file.createNewFile();
//        file02.createNewFile();//        File file=new File("D://gyh//zql//ldh");
//        //创建目录
//        //file.mkdir();
//        //创建多级目录 /a/b/c/d
//        file.mkdirs();//删除文件或目录
//        File file02=new File("D:\\aaaaaaa");
//        //删除目录时只能删除空目录
//        file02.delete();//修改文件名称File file02=new File("qy174.txt");File file01=new File("zhenshuai.txt");file02.renameTo(file01);}

2.2 文件的查找操作

public class Test02 {public static void main(String[] args) {File file01=new File("D:\\aaaaaaa");
//        File file01=new File("zhenshuai.txt");//获取文件名String name = file01.getName();System.out.println("文件名:"+name);//获取文件的父路径String parent = file01.getParent();System.out.println("父路径:"+parent);//获取文件相对路径String path = file01.getPath();System.out.println("文件路径:"+path);//绝对路径String absolutePath = file01.getAbsolutePath();System.out.println(absolutePath);System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");//获取该目录下所有的子文件名String[] list = file01.list();for(String s:list){System.out.println(s);}System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");//获取当前目录下的所有子文件对象File[] files = file01.listFiles();for(File f:files){String absolutePath1 = f.getAbsolutePath();System.out.println(absolutePath1);}}
}

3. File里面一些其他方法

//判断文件或目录是否存在。boolean exists = file01.exists();System.out.println("文件是否存在"+exists);//判断文件是否为目录boolean directory = file01.isDirectory();System.out.println("该文件是否为目录:"+directory);

3.1 经典案例

查询某个目录下所有的文件。

public static void main(String[] args) {File file=new File("D:\\gz01-spring-transaction01");listFile(file);}public static void listFile(File file){//判断file是否为目录boolean directory = file.isDirectory();if(directory){//查看该目录下所有的文件对象File[] files = file.listFiles();//遍历for (File f:files){//递归调用listFile(f);}}else{System.out.println("文件名:"+file.getAbsolutePath());}}

4. IO流

4.1 概念

上面讲解得到File,它只能对文件进行操作,但是无法对文件中的内容进行操作。如果需要对文件中的内容进行操作则需要IO流。IO针对文件的内容操作的一个类集合

4.2 IO分类

流的方向: 输入流和输出流。

 根据流的内容: 字节流和字符流。

4.3 字节输出流

字节输出流的父类:OutputStream,它是所有字节输出流的父类,它是一个抽象类,最常见的子类FileOutputStream。

public static void main(String[] args) {//创建一个字节输出流--往zhenshuai.txt文件中输出内容---该流默认覆盖原本的内容OutputStream os = null;try {os = new FileOutputStream(new File("src/zhenshuai.txt"), true);String msg = "曹荣华也很真帅";//调用输出功能---必须为字节类型--转化为字节os.write(msg.getBytes());} catch (Exception e) {e.printStackTrace();} finally {//关闭流if (os != null) {try {os.close();} catch (IOException e) {e.printStackTrace();}}}}

4.4 字节输入流

以字节的方式读取文件中的内容。读取到程序中【内存中】。 字节输入流的父类InputStream,它里面包含操作字节的方法, 它也是一个抽象类,最常见的子类:FileInputStream。

public class Test02 {public static void main(String[] args) throws Exception {//创建一个字节输入流对象InputStream is=new FileInputStream(new File("src/zhenshuai.txt"));//调用读取的方法--每次读取一个字节--并把读取的内容返回--如果没有内容返回-1int a=-1;while ((a=is.read())!=-1){char c= (char) a;System.out.print(c);}is.close();}
}

4.5 案例

通过流完成文件的复制。

public class Test03 {public static void main(String[] args) throws Exception {//输入流InputStream is=new FileInputStream(new File("D:\\rabbitmq视频\\1.什么是mq.mp4"));//输出流OutputStream os=new FileOutputStream(new File("D:\\qy174.mp4"));int a=-1;while((a=is.read())!=-1){os.write(a);}is.close();os.close();}
}

4.6 字符输出流

Write类,它是所有字符输出流的父类,输出的内容以字符为单位。它下面常用的子类FileWrite。

public class Test04 {public static void main(String[] args) throws Exception {//创建一个字符输出流--如果文件不存在--该流回自动创建Writer w=new FileWriter(new File("liurui.txt"),true);String str="你好李焕英! 热辣滚烫";w.write(str);w.close();}
}

4.7 字符输入流

Reader它是字符输入流的一个父类,它也是抽象类,常见的子类FileReader.以字符为单位。

public class Test05 {public static void main(String[] args) throws Exception {Reader r=new FileReader(new File("liurui.txt"));//读取的单位为一个字符--如果没有内容返回的结果-1int i=-1;while ((i=r.read())!=-1){char c= (char) i;System.out.print(c);}r.close();}
}

4.8 案例

字符流它只能复制文本内容---无法复制文本之外的内容:比如视频,音频,图片 word。

public class Test06 {public static void main(String[] args) throws Exception{//输入流Reader r=new FileReader(new File("D:\\2.jpg"));//输出流Writer w=new FileWriter(new File("D:\\3.jpg"));int a=-1;while ((a=r.read())!=-1){w.write(a);}r.close();w.close();}
}

 字节流--可以操作任何文件的内容 字符流只适合操作文本的内容。

4.9 处理流--缓冲流

常用的缓冲流: BufferedInputStream 和BufferOutputStream 缓冲流是作用在流上。

public class Test07 {public static void main(String[] args)throws Exception {InputStream is=new FileInputStream(new File("liurui.txt"));//创建一个缓冲字节输入流BufferedInputStream bis=new BufferedInputStream(is);//缓冲流里面的方法操作文件内容int read =-1;while ((read=bis.read())!=-1){char c= (char) read;System.out.print(c);}bis.close();is.close();}
}
public class Test08 {public static void main(String[] args) throws Exception{OutputStream os=new FileOutputStream(new File("liurui.txt"));BufferedOutputStream bos=new BufferedOutputStream(os);String msg="hello";bos.write(msg.getBytes());bos.close();//刷新缓冲区os.close();}
}

提供效率:

public class Test09 {public static void main(String[] args) throws Exception {//开始时间long l = System.currentTimeMillis();//输入流InputStream is=new FileInputStream(new File("D:\\rabbitmq视频\\1.什么是mq.mp4"));BufferedInputStream bis=new BufferedInputStream(is);//输出流OutputStream os=new FileOutputStream(new File("D:\\qy174-02.mp4"));BufferedOutputStream bos=new BufferedOutputStream(os);int a=-1;while((a=bis.read())!=-1){bos.write(a);}bos.close();bis.close();is.close();os.close();//结束时间long l1 = System.currentTimeMillis();System.out.println("耗时:"+(l1-l));}
}

4.10 对象流:

操作java类对象。把java类对象写入到文件中,或者从文件中读取写入的java对象。

序列化: 把内存中的java对象写入到文件中的过程--序列化。

反序列化: 把文件中的对象读取到内存中---反序列化。

ObjectInputStream和ObjectOutputStream

ObjectOutputStream

把java对象写入到文件中。

public class Test10 {public static void main(String[] args) throws Exception{read();}public static void read() throws Exception{InputStream is=new FileInputStream(new File("liurui.txt"));ObjectInputStream ois=new ObjectInputStream(is);Object o = ois.readObject();ois.close();is.close();System.out.println(o);}//序列化过程: 借助ObjectOutputStream流 调用writeObject()  注意: 该类必须实现序列化接口Serializablepublic static void write() throws Exception{//把该对象写入liurui.txt文件中Student s=new Student(16,"闫克起");OutputStream os=new FileOutputStream(new File("liurui.txt"));ObjectOutputStream oos=new ObjectOutputStream(os);//把一个java对象写入文件时要求该对象所在的类必须实现序列化接口oos.writeObject(s);oos.close();os.close();}
}
class Student implements Serializable {private Integer age;private String name;@Overridepublic String toString() {return "Student{" +"age=" + age +", name='" + name + '\'' +'}';}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Student(Integer age, String name) {this.age = age;this.name = name;}public Student() {}
}

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

源代码加密软件哪家好?2024八款源代码加密软件排行榜

源代码加密软件哪家好?2024八款源代码加密软件排行榜 在数字化时代,源代码作为软件开发的生命线,其安全性对于企业来说至关重要。源代码加密软件是保护这一宝贵资产的有力工具,它们通过加密技术防止源代码被非法访问、复制或修改…

人、智能、机器人……

在遥远的未来之城,智能时代如同晨曦般照亮了每一个角落,万物互联,机器智能与人类智慧交织成一幅前所未有的图景。这座城市,既是科技的盛宴,也是人性与情感深刻反思的舞台。 寓言:《智光与心影》 在智能之…

字节面试:如何让单机下Netty支持百万长连接?

最近有同学在面试遇到了一道非常有深度的面试题: 如何让单机下Netty支持百万长连接? 当时在群里问小北,我发现我也没有系统化的梳理过这个问题,所以一时也没有回答的特别好。 痛定思痛的我赶紧去各种搜集资料,系统化的…

(三)原生js案例之滚动到底部解锁按钮状态

业务主要是注册页面&#xff0c;有很长的条款需要用户去读&#xff0c;必须确认用户是不是看到全部的条款&#xff0c;这个场景下可以使用 效果 代码实现 必要的css <style>*{padding: 0;margin: 0;}ul{list-style: none;width: 330px;height: 100%;/* height: 200px;…

kotlin compose 实现应用内多语言切换(不重新打开App)

1. 示例图 2.具体实现 如何实现上述示例,且不需要重新打开App ①自定义 MainApplication 实现 Application ,定义两个变量: class MainApplication : Application() { object GlobalDpData { var language: String = "" var defaultLanguage: Strin…

DA-SVM多变量分类预测|蜻蜓优化算法-支持向量机|Matalb

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、原理介绍&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译&a…

【LeetCode】十四、回溯法:括号生成 + 子集

文章目录 1、回溯法2、leetcode22&#xff1a;括号生成3、leetcode78&#xff1a;子集 1、回溯法 使用场景&#xff0c;如找[1&#xff0c;2&#xff0c;3]的所有子集&#xff1a; 2、leetcode22&#xff1a;括号生成 以n2为例&#xff0c;即两个左括号、两个右括号&#xff0c…

小白操作Typora快捷键操作day01

小白操作Typora快捷键操作day01 一、标题 建议先写标题内容&#xff0c;然后不需要选中直接Ctrl1~6对应所需要的标题&#xff0c;然后回车 ctrl""级别增加 ctrl1~6对应级别的标题&#xff08;ctrl0是普通文本&#xff09; 二、段落 1、换行 笑呵呵&#xff08…

科技论文在线--适合练习期刊写作和快速发表科技成果论文投稿网站

中国科技论文在线这个平台可以作为练手的一个渠道&#xff0c;至少可以锻炼一下中文写作&#xff0c;或者写一些科研方向的简单综述性文章。当然&#xff0c;如果你的老师期末要求也是交一份科技论文在线的刊载证明的话&#xff0c;这篇文章可以给你提供一些经验。 中国科技论…

政安晨【零基础玩转各类开源AI项目】基于Ubuntu系统部署Hallo :针对肖像图像动画的分层音频驱动视觉合成

政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: 零基础玩转各类开源AI项目 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 本文目标&#xff1a;在Ubuntu系统上部署Hallo&#x…

高频面试题-CSS

BFC 介绍下BFC (块级格式化上下文) 1>什么是BFC BFC即块级格式化上下文&#xff0c;是CSS可视化渲染的一部分, 它是一块独立的渲染区域&#xff0c;只有属于同一个BFC的元素才会互相影响&#xff0c;且不会影响其它外部元素。 2>如何创建BFC 根元素&#xff0c;即HTM…

【好玩的经典游戏】Docker环境下部署赛车小游戏

【好玩的经典游戏】Docker环境下部署赛车小游戏 一、小游戏介绍1.1 小游戏简介1.2 项目预览二、本次实践介绍2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 安装Docker环境3.2 检查Docker服务状态3.3 检查Docker版本3.4 检查docker compose 版本四、构建容器镜像4.1 下…

基于springboot新生宿舍管理系统

系统背景 在当今高等教育日益普及的时代背景下&#xff0c;高校作为知识传播与创新的重要基地&#xff0c;其基础设施的智能化管理显得尤为重要。新生宿舍作为大学生活的起点&#xff0c;不仅是学生日常生活与学习的重要场所&#xff0c;也是培养学生独立生活能力和团队合作精神…

IP溯源工具--IPTraceabilityTool

工具地址&#xff1a;xingyunsec/IPTraceabilityTool: 蓝队值守利器-IP溯源工具 (github.com) 工具介绍&#xff1a; 在攻防演练期间&#xff0c;对于值守人员&#xff0c;某些客户要求对攻击IP都进行分析溯源&#xff0c;发现攻击IP的时候&#xff0c;需要针对攻击IP进行分析…

【electron6】浏览器实时播放PCM数据

pcm介绍&#xff1a;PCM&#xff08;Puls Code Modulation&#xff09;全称脉码调制录音&#xff0c;PCM录音就是将声音的模拟信号表示成0,1标识的数字信号&#xff0c;未经任何编码和压缩处理&#xff0c;所以可以认为PCM是未经压缩的音频原始格式。PCM格式文件中不包含头部信…

单片机程序设计模式

RTOS:多任务拆分交叉执行 Q:状态机和多任务模式有什么区别 Q:任务创建和任务调度器是什么&#xff1f; 裸机程序的设计模式可以分为&#xff1a;轮询、前后台、定时器驱动、基于状态机。前面三种方 法都无法解决一个问题&#xff1a;假设有 A、B 两个都很耗时的函数&#xf…

基于牛顿-拉夫逊优化算法(Newton-Raphson-based optimizer, NBRO)的无人机三维路径规划

牛顿-拉夫逊优化算法(Newton-Raphson-based optimizer, NBRO)是一种新型的元启发式算法&#xff08;智能优化算法&#xff09;&#xff0c;该成果由Sowmya等人于2024年2月发表在中科院2区Top SCI期刊《Engineering Applications of Artificial Intelligence》上。 1、算法原理…

前端开发_注意事项

无论使用哪种框架开发&#xff08;vue、react、...&#xff09;&#xff0c;前端开发终究是结构&#xff08;HTML&#xff09;、样式&#xff08;CSS&#xff09;、逻辑&#xff08;用户操作数据处理对接后端API&#xff09;。那么开发过程中都需要注意哪些事项&#xff0c;本文…

VScode:前端项目中yarn包的安装和使用

一、首先打开PowerShell-管理员身份运行ISE 输入命令&#xff1a; set-ExecutionPolicy RemoteSigned 选择“全是”&#xff0c;表示允许在本地计算机上运行由本地用户创建的脚本&#xff0c;没有报错就行了 二、接着打开VScode集成终端&#xff0c;安装yarn插件 输入 npm ins…

新版本 idea 创建不了 spring boot 2 【没有jkd8选项】

创建新项目 将地址换成如下 https://start.aliyun.com/