当前位置: 首页 > 编程日记 > 正文

Java基础班学习笔记(13)IO流

知识要点:
1:异常(理解)
(1)程序出现的不正常的情况。
(2)异常的体系
Throwable
|--Error 严重问题,我们不处理。
|--Exception
|--RuntimeException 运行期异常,我们需要修正代码
|--非RuntimeException 编译期异常,必须处理的,否则程序编译不通过
(3)异常的处理:
A:JVM的默认处理
把异常的名称,原因,位置等信息输出在控制台,但是呢程序不能继续执行了。
B:自己处理
a:try...catch...finally
自己编写处理代码,后面的程序可以继续执行
b:throws
把自己处理不了的,在方法上声明,告诉调用者,这里有问题
(4)面试题
A:编译期异常和运行期异常的区别?
编译期异常 必须要处理的,否则编译不通过
运行期异常 可以不处理,也可以处理
B:throw和throws是的区别
throw:
在方法体中,后面跟的是异常对象名,并且只能是一个
throw抛出的是一个异常对象,说明这里肯定有一个异常产生了
throws:
在方法声明上,后面跟的是异常的类名,可以是多个
throws是声明方法有异常,是一种可能性,这个异常并不一定会产生
(5)finally关键字及其面试题
A:finally用于释放资源,它的代码永远会执行。特殊情况:在执行到finally之前jvm退出了
B:面试题
a:final,finally,finalize的区别?
b:如果在catch里面有return,请问finally还执行吗?如果执行,在return前还是后
会,前。
实际上在中间。这个上课我们讲过
C:异常处理的变形
try...catch...finally
try...catch...
try...catch...catch...
try...catch...catch...fianlly
try...finally
(6)自定义异常
继承自Exception或者RuntimeException,只需要提供无参构造和一个带参构造即可
(7)异常的注意实现
A:父的方法有异常抛出,子的重写方法在抛出异常的时候必须要小于等于父的异常
B:父的方法没有异常抛出,子的重写方法不能有异常抛出
C:父的方法抛出多个异常,子的重写方法必须比父少或者小
2:File(掌握)
(1)IO流操作中大部分都是对文件的操作,所以Java就提供了File类供我们来操作文件
(2)构造方法
A:File file = new File("e:\\demo\\a.txt");
B:File file = new File("e:\\demo","a.txt");
C:File file = new File("e:\\demo");
File file2 = new File(file,"a.txt");
(3)File类的功能(自己补齐)
A:创建功能
B:删除功能
C:重命名功能
D:判断功能
E:获取功能
F:高级获取功能
G:过滤器功能
(4)案例:
A:输出指定目录下指定后缀名的文件名称
a:先获取所有的,在遍历的时候判断,再输出
b:先判断,再获取,最后直接遍历输出即可
B:批量修改文件名称

==============================================================

知识要点:
1:递归(理解)
(1)方法定义中调用方法本身的现象
举例:老和尚给小和尚讲故事,我们学编程
(2)递归的注意事项;
A:要有出口,否则就是死递归
B:次数不能过多,否则内存溢出
C:构造方法不能递归使用
(3)递归的案例:
A:递归求阶乘
B:兔子问题
C:递归输出指定目录下所有指定后缀名的文件绝对路径
D:递归删除带内容的目录(小心使用)
2:IO流(掌握)
(1)IO用于在设备间进行数据传输的操作
(2)分类:
A:流向
输入流 读取数据
输出流 写出数据
B:数据类型
字节流
字节输入流
字节输出流
字符流
字符输入流
字符输出流
注意:
a:如果我们没有明确说明按照什么分,默认按照数据类型分。
b:除非文件用windows自带的记事本打开我们能够读懂,才采用字符流,否则建议使用字节流。
(3)FileOutputStream写出数据
A:操作步骤
a:创建字节输出流对象
b:调用write()方法
c:释放资源
B:代码体现:
FileOutputStream fos = new FileOutputStream("fos.txt");
fos.write("hello".getBytes());
fos.close();
C:要注意的问题?
a:创建字节输出流对象做了几件事情?
b:为什么要close()?
c:如何实现数据的换行?
d:如何实现数据的追加写入?
(4)FileInputStream读取数据
A:操作步骤
a:创建字节输入流对象
b:调用read()方法
c:释放资源
B:代码体现:
FileInputStream fis = new FileInputStream("fos.txt");
//方式1
int by = 0;
while((by=fis.read())!=-1) {
System.out.print((char)by);
}
//方式2
byte[] bys = new byte[1024];
int len = 0;
while((len=fis.read(bys))!=-1) {
System.out.print(new String(bys,0,len));
}
fis.close();
(5)案例:2种实现
A:复制文本文件
B:复制图片
C:复制视频
(6)字节缓冲区流
A:BufferedOutputStream
B:BufferedInputStream
(7)案例:4种实现
A:复制文本文件
B:复制图片
C:复制视频
3:自学字符流
IO流分类
字节流:
InputStream
FileInputStream
BufferedInputStream
OutputStream
FileOutputStream
BufferedOutputStream
字符流:
Reader
FileReader
BufferedReader
Writer
FileWriter
BufferedWriter
================================================
知识要点:
1:字符流(掌握)
(1)字节流操作中文数据不是特别的方便,所以就出现了转换流。
转换流的作用就是把字节流转换字符流来使用。
(2)转换流其实是一个字符流
字符流 = 字节流 + 编码表
(3)编码表
A:就是由字符和对应的数值组成的一张表
B:常见的编码表
ASCII
ISO-8859-1
GB2312
GBK
GB18030
UTF-8
C:字符串中的编码问题
编码
String -- byte[]
解码
byte[] -- String
(4)IO流中的编码问题
A:OutputStreamWriter
OutputStreamWriter(OutputStream os):默认编码,GBK
OutputStreamWriter(OutputStream os,String charsetName):指定编码。
B:InputStreamReader
InputStreamReader(InputStream is):默认编码,GBK
InputStreamReader(InputStream is,String charsetName):指定编码
C:编码问题其实很简单
编码只要一致即可
(5)字符流
Reader
|--InputStreamReader
|--FileReader
|--BufferedReader
Writer
|--OutputStreamWriter
|--FileWriter
|--BufferedWriter
(6)复制文本文件(5种方式)
2:IO流小结(掌握)
IO流
|--字节流
|--字节输入流
InputStream
int read():一次读取一个字节
int read(byte[] bys):一次读取一个字节数组
|--FileInputStream
|--BufferedInputStream
|--字节输出流
OutputStream
void write(int by):一次写一个字节
void write(byte[] bys,int index,int len):一次写一个字节数组的一部分
|--FileOutputStream
|--BufferedOutputStream
|--字符流
|--字符输入流
Reader
int read():一次读取一个字符
int read(char[] chs):一次读取一个字符数组
|--InputStreamReader
|--FileReader
|--BufferedReader
String readLine():一次读取一个字符串
|--字符输出流
Writer
void write(int ch):一次写一个字符
void write(char[] chs,int index,int len):一次写一个字符数组的一部分
|--OutputStreamWriter
|--FileWriter
|--BufferedWriter
void newLine():写一个换行符
void write(String line):一次写一个字符串
3:案例(理解 练习一遍)
A:复制文本文件 5种方式(掌握)
B:复制图片(二进制流数据) 4种方式(掌握)
C:把集合中的数据存储到文本文件
D:把文本文件中的数据读取到集合并遍历集合
E:复制单级文件夹
F:复制单级文件夹中指定的文件并修改名称
回顾一下批量修改名称
G:复制多级文件夹
H:键盘录入学生信息按照总分从高到低存储到文本文件
I:把某个文件中的字符串排序后输出到另一个文本文件中
J:用Reader模拟BufferedReader的特有功能
K:模拟LineNumberReader的特有功能
=======================================================
1:登录注册IO版本案例(掌握)
要求,对着写一遍。
cn.itcast.pojo User
cn.itcast.dao UserDao
cn.itcast.dao.impl UserDaoImpl(实现我不管)
cn.itcast.game GuessNumber
cn.itcast.test UserTest
2:数据操作流(操作基本类型数据的流)(理解)
(1)可以操作基本类型的数据
(2)流对象名称
DataInputStream
DataOutputStream
3:内存操作流(理解)
(1)有些时候我们操作完毕后,未必需要产生一个文件,就可以使用内存操作流。
(2)三种
A:ByteArrayInputStream,ByteArrayOutputStream
B:CharArrayReader,CharArrayWriter
C:StringReader,StringWriter
4:打印流(掌握)
(1)字节打印流,字符打印流
(2)特点:
A:只操作目的地,不操作数据源
B:可以操作任意类型的数据
C:如果启用了自动刷新,在调用println()方法的时候,能够换行并刷新
D:可以直接操作文件
问题:哪些流可以直接操作文件呢?
看API,如果其构造方法能够同时接收File和String类型的参数,一般都是可以直接操作文件的
(3)复制文本文件
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
PrintWriter pw = new PrintWriter(new FileWriter("b.txt"),true);
String line = null;
while((line=br.readLine())!=null) {
pw.println(line);
}
pw.close();
br.close();
5:标准输入输出流(理解)
(1)System类下面有这样的两个字段
in 标准输入流
out 标准输出流
(2)三种键盘录入方式
A:main方法的args接收参数
B:System.in通过BufferedReader进行包装
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
C:Scanner
Scanner sc = new Scanner(System.in);
(3)输出语句的原理和如何使用字符流输出数据
A:原理
System.out.println("helloworld");
PrintStream ps = System.out;
ps.println("helloworld");
B:把System.out用字符缓冲流包装一下使用
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
6:随机访问流(理解)
(1)可以按照文件指针的位置写数据和读数据。
(2)案例:
A:写数据
B:读数据
C:获取和改变文件指针的位置
7:合并流(理解)
(1)把多个输入流的数据写到一个输出流中。
(2)构造方法:
A:SequenceInputStream(InputStream s1, InputStream s2)
B:SequenceInputStream(Enumeration<? extends InputStream> e)
8:序列化流(理解)
(1)可以把对象写入文本文件或者在网络中传输
(2)如何实现序列化呢?
让被序列化的对象所属类实现序列化接口。
该接口是一个标记接口。没有功能需要实现。
(3)注意问题:
把数据写到文件后,在去修改类会产生一个问题。
如何解决该问题呢?
在类文件中,给出一个固定的序列化id值。
而且,这样也可以解决黄色警告线问题
(4)面试题:
什么时候序列化?
如何实现序列化?
什么是反序列化?
9:Properties(理解)
(1)是一个集合类,Hashtable的子类
(2)特有功能
A:public Object setProperty(String key,String value)
B:public String getProperty(String key)
C:public Set<String> stringPropertyNames()
(3)和IO流结合的方法
把键值对形式的文本文件内容加载到集合中
public void load(Reader reader)
public void load(InputStream inStream)
把集合中的数据存储到文本文件中
public void store(Writer writer,String comments)
public void store(OutputStream out,String comments)
(4)案例:
A:根据给定的文件判断是否有键为"lisi"的,如果有就修改其值为100
B:写一个程序实现控制猜数字小游戏程序不能玩超过5次
10:NIO(了解)
(1)JDK4出现的NIO,对以前的IO操作进行了优化,提供了效率。但是大部分我们看到的还是以前的IO
(2)JDK7的NIO的使用
Path:路径
Paths:通过静态方法返回一个路径
Files:提供了常见的功能
复制文本文件
把集合中的数据写到文本文件

转载于:https://www.cnblogs.com/supoman2015/p/4576061.html

相关文章:

问题一:云服务中那么多的服务器怎么拓扑???

云服务&#xff1a; 1.云存储&#xff08;百度云&#xff09; 2.视频点播 3.平台或者是软件&#xff08;阿里云&#xff09; 数据中心&#xff1a;存储数据的地方&#xff0c;我们通常会在一些电影里看到的大型的服务器整齐的罗列在一个大的房间中&#xff0c;那个也就差不…

2016-2022年AutoCAD起重机吊装计划和索具图纸

AutoCAD Crane Lifting Plan and Rigging Drawings 2016-2022 完成AutoCAD 2D高级起重机提升计划和索具图纸-基于项目的培训 你会学到什么 学习所有基本和高级的AutoCAD 2D工具栏 学习高级块和动态块 准备AutoCAD面试和考试 创建图纸、物料清单和布局的使用 学习图纸集管理器和…

tensorflow 转张量类型为float_TensorFlow快速入门

TensorFlow是一个数值计算库&#xff0c;其中数据&#xff08;Tensor&#xff0c;张量&#xff09;在计算图中流动。数据在TensorFlow用被称为张量的n维数据表示。计算图由数据和数学操作符构成。计算图中的节点代表数学操作符计算图中的边代表操作符之间的张量计算图(Graph)在…

环境变量配置文件

环境变量配置文件 关于显示"bash5.2#"问题 由于是PS1没有设置成功&#xff0c;说明~/.bash_profile --> ~/.bashrc --> /etc/.bashrc的文件加载流程出错。 posted on 2016-04-06 12:50 大侠去哪儿 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.…

【译】CSS动画 vs JS动画

原文地址 目前有两个主流的方法在web上创建动画&#xff1a;使用CSS或JS。到底选择哪种方法来实现动画&#xff0c;完全取决于你的项目以及你想要达到的效果。 tips: 对于简单的只出现一次的过渡效果&#xff0c;可以采用CSS动画&#xff0c;比如切换UI元素的状态在需要高级的效…

问题二:相关性怎么引入?

在大数据处理的时候总是会有说&#xff0c;现今科学技术的发展使得我们使用样本取代总体的时代过去了。在新的时代我们使用的是足够多的接近于总体的大的数据。在这个大的数据里面&#xff0c;我们没有办法具体数据具体的分析。因为它足够的大。 因此引入了相关性的概念&#x…

【UE5】虚幻引擎5中的VFX游戏特效制作学习教程

从零开始学习虚幻引擎5中的实时VFX。 你会学到什么 了解如何创建实时效果 通过创造效果来学习Niagara 了解Niagara是如何运作的 为游戏创造各种各样的效果。 创造风格化的火 创建风格化的爆炸 创造能量球 MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz 语…

HDOJ 1236 排名(练耐心题)

Problem Description 今天的上机考试虽然有实时的Ranklist&#xff0c;但上面的排名只是根据完成的题数排序&#xff0c;没有考虑 每题的分值&#xff0c;所以并不是最后的排名。给定录取分数线&#xff0c;请你写程序找出最后通过分数线的 考生&#xff0c;并将他们的成绩按…

python跟java 效率_对比平台--Java与Python之间的性能差异

ava Performance和Python之间的主要区别 以下是描述Java Performance和Python之间的区别的要点列表&#xff1a; 以下是Java性能与Python之间的主要区别&#xff0c;我们在决定应该选择哪种语言之前必须进行分析和评估。 Java是一种编译语言&#xff0c;而Python是一种解释语言…

你听说过反摩尔定律吗?

相信很多人听说过摩尔定律&#xff0c;但是你听说过反摩尔定律吗&#xff1f; 可能你会以为反摩尔定律就是与摩尔定律相反的定律&#xff0c;甚至认为这两个定律相互矛盾&#xff0c;那你就大错特错了&#xff0c;其实两种定律可以说是针对同一种现象的不同说法。 摩尔定律是…

《Java从入门到精通》第九章学习笔记

第9章 类的高级特性 一、抽象类 抽象类只声明方法的存在&#xff0c;不能被实例化&#xff0c;就是说抽象类不能创建其对象&#xff0c;在定义抽象类时要在class前面加上abstract关键字。 1 /*定义一个抽象类Fruit&#xff0c;并定义其抽象方法2 *在其子类中实现该抽象方法3 …

Python中的super()函数

多路继承的问题 描述&#xff1a; 解决这样的问题Python中可以使用super&#xff08;&#xff09; super&#xff08;&#xff09;函数有点&#xff1a; &#xff08;1&#xff09;在父类中可以直接的调用未绑定的方法 &#xff08;2&#xff09;在确保所有的父类的构造方…

【UE5教程】影棚拍摄于虚拟场景合成制作流程学习

用虚幻引擎预算虚拟生产5 你会学到什么 使用虚幻引擎5进行虚拟生产 使用虚幻引擎5的独立虚拟制作 用虚幻引擎预算虚拟生产5 用虚幻引擎5进行穷人虚拟生产 用虚幻引擎5进行自制虚拟制作 虚幻引擎5独立虚拟制作 带虚幻引擎5的复合绿屏 虚拟生产导论 面向初学者的虚拟生产 MP4 |视…

java面试题:分布式和微服务的区别

分布式架构解决的是如何将一个大的系统划分为多个业务模块这些业务模块会分别部署到不同的机器上,通过接口进行数据交互的问题。微服务是指很小的服务,可以小到只完成一个功能,这个服务可以单独部署运行,不同服务之间通过rpc调用。分布式架构是将一个大的系统划分为多个业务模块,这些业务模块会分别部署到不同的机器上,通过接口进行数据交互。微服务架构是架构设计方式,是设计层面的东西,一般考虑如何将系统从逻辑上进行拆分,也就是垂直拆分。分布式系统是部署层面的东西,即强调物理层面的组成,即系统的各子系统部署在不同计算机上。

python安装成功的图标_ubuntu下:安装anaconda、环境配置、软件图标的创建、成功启动anaconda图形界面...

Ubuntu安装anaconda常见的四大问题&#xff1a;目录1、介绍2、安装anaconda3、环境配置4、软件图标的创建5、成功启动anaconda图形界面1、介绍先介绍一下anaconda和python的关系&#xff1a;初学者所安装的python2/3只是python的环境&#xff0c;没有python的工具包&a…

jQuery和dom的相互转换

1.将DOM对象转换成jQuery对象 $div $(objDom); 2.将jQuery对象转换成DOM对象 objDom $(objJqeury).get(0); 3.判断一个元素是否存在于页面 jQuery方法&#xff1a; $("#id").length >0:代表存在于页面 0&#xff1a;不存在页面 4.取另一个页面中存在的元素 …

VScode的撤销操作的快捷键

撤销刚才的操作&#xff1a;CtrlZ 恢复刚才的操作&#xff1a;CtrlShiftZ

IOS初级:UIAlertController

- (IBAction)signOutAction:(id)sender {//初始化,StyleActionSheet是对话框的样式UIAlertController *alert [UIAlertController alertControllerWithTitle:"是否注销?" message:"真的要注销吗" preferredStyle:UIAlertControllerStyleActionSheet];//添…

1976年图灵奖

获奖原因&#xff1a; 在1959年发表的论文“有限自动机及其判定问题”中提出了非确定性有限状态自动机这一概念。 图灵奖引用&#xff1a; 授 予 MichaelO. Rabin与DanaSteward Scott图灵奖以表彰合作撰写的研究论文“有限自动机与其判定性问题”。在该研究论文中&#xff0c;…

UE4蓝图无代码编程游戏开发技能学习教程

在虚幻引擎4中创建、设计和开发自己的游戏&#xff0c;无需编码 你会学到什么 虚幻引擎4中使用蓝图的游戏开发(无代码编程) 使用行业标准方法的游戏设计 使用Maya进行三维设计 在本课程中创建您的第一个游戏 Game Development Essentials with Unreal Engine 4 Blueprints M…

“睡眠猴子”团队项目及成员介绍

“睡眠猴子”团队项目及成员介绍 咳咳……软件工程这门课最终还是来到了团队开发的部分&#xff0c;我们宿舍三只经过一下午的讨论和需求分析决定做一款名叫“睡眠猴子”的安卓版手机软件&#xff0c;具体的项目功能和团队介绍如下&#xff1a; 一、“睡眠猴子”开发团队介绍&a…

python代码编写规范_python初学者-代码规范

一、编程规范 1.缩进&#xff08;代码块&#xff09; 类定义、函数定义、选择结构、循环结构、with块、行尾的冒号表示缩进的开始。 python程序是依靠代码块的缩进来体现代码之间的逻辑关系&#xff0c;缩进结束就表示一个代码块结束。 同一个级别的代码块的缩进量必须相同。 一…

程序出现 ld returned 1 exit status的解决办法之一

把正在运行的窗口关闭

基于自然的灵感算法--元启发式

问题一&#xff1a;自然赋予的元启发式优化算法的分类 自然赋予的元启发式算法&#xff08;模拟生物或者物理的现象去解决问题&#xff09;有三大类也就是&#xff1a;基于进化&#xff0c;基于物理的&#xff0c;基于群体的 基于进化的主要是受达尔文的物种进化理论的启发&a…

三维地形制作软件 World Machine 基础入门学习教程

《World Machine课程》涵盖了你需要的一切&#xff0c;让你有一个坚实的基础来构建自己的高质量的电影或视频游戏地形。 你会学到什么 为渲染或游戏开发创建高分辨率、高细节的地形。 基于World Machine蒙版和着色设备的纹理地形。 获得哪个节点达到预期结果的信心。 组装宏以…

python编写脚本方法_【Python】教你一步步编写banner获取脚本

Hello 各位小伙伴们大家好&#xff0c;周末过的愉快吗&#xff1f; 刚好最近学习了使用python编写banner获取脚本&#xff0c;今天就跟大家一起一步一步再学习一遍吧。 Part.1 说明篇 什么是banner&#xff1f; banner可以理解为我们连上服务器后&#xff0c;服务器响应的第一条…

Linux内核分析——可执行程序的装载

链接的过程 首先运行C预处理器cpp&#xff0c;将C的源程序(a.c)翻译成ASCII码的中间文件(a.i)接着C编译器ccl&#xff0c;将a.i翻译成ASCII汇编语言文件a.s接着运行汇编器as&#xff0c;将a.s翻译成可重定位的目标文件a.o最终完全链接成可执行文件a.out目标文件 目标文件有三种…

c语言中external,static关键字用法

static用法&#xff1a; 在C中&#xff0c;static主要定义全局静态变量、定义局部静态变量、定义静态函数。 1、定义全局静态变量&#xff1a;在全局变量前面加上关键字static&#xff0c;该全局变量变成了全局静态变量。全局静态变量有以下特点。 a.在全局区分配内存。 b.如…

男神女神配——alpha阶段总结

一、需求分析 虽然公共社交网络系统能够满足大多数高校校园用户在校园网络社交的需求&#xff0c;但是针对校园学习、工作和文化生活等方面的支持以及学校个性化需求方面却存在不足。利用电子校务平台的数据&#xff0c;设计了与真实校园环境和活动紧密结合&#xff0c;包含具有…

正向代理和反向代理??

(5 条消息)正向代理 反向代理 本质区别&#xff1f; - 知乎 https://www.zhihu.com/question/36412304/answer/76804314 正向代理&#xff0c;只用于代理内部网络对Internet的连接请求&#xff0c;客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代…