Java基础总结--IO总结2

1.键盘录入--Java具有特定的对象封装这些输入输出设备
在System类定义 in-InputStream类型和out-PrintStream类型成员变量
阻塞是方法:read()无数据就阻塞
windows里面回车键对于两个字节\r-13\n-10
从系统获得流对象只有一个,所以别关流
InputStream in = System.in(调用的是系统的流,在Java中被定义为该中类型)
不要进行关闭,因为关闭的是系统的流否则会用不了。
StingBulider/StringBuffer清空用的是delete()
键盘录入的结束通常都是自定义结束的

2.转换流(字节流与字符流之间的转化)
字节流想利用字符缓冲流的readLine()--先转化为字符流,在被缓冲流装饰
InputStreamReader和OutputStreamReader继承Reader
InputStreamReader(InputStream in)--字节流转化为字符流可以指定charset编码
对于字节与字符流的区别:字节对于一个中文需要读两次,字符对于中文其实也是利用底层的字节流读两次再进行查表,返回一个中文字符。
字符流 = 字节流 + 编码表(未指定按照操作系统默认的码表)
编码:文字转化为数字encode
解码:数字转化为文字decode
流的传送:源A地--小管道--大管道--大管道--小管道--目的B地
转化流:可以指定编码表(未指定就用本机默认和其子类相同)
中文GBK-2B/UTF-8(国际标准-按照实际长度定字节数-每字节存在编码头)
指定用UTF-8写就要用UTF-8读
* 什么时候使用转化流:
源或目是字节流操作是文本数据,可以使用转化流,提高对 文本的操作
一旦文本操作涉及具体的编码表时候,必须使用转化流

3.流操作的基本规律---流只能对传送的数据进行操作
* 明确源地和目地
* 明确数据是否是纯文本数据--确定使用的具体体系
是:字符流
否:字节流
* 明确具体的设备
源设备:
硬盘--文件
键盘--System.in
内存--数组
网络--Socket流
目设备:
硬盘--文件
控制台--System.out
内存--数组
网络--Socket流
* 是否需要提高额外功能
需要高效(缓冲区)
是否需要转换流

4.File类--将存在/不存在的文件或文件夹封装成对象
* 方便对文件或文件夹的属性信息进行操作
* File类对象可以作为参数传递给流对象
* File类的常见方法
构造方法
File(File parent, String child) //1,2类似
File(String parent, String child)
File(String pathname)
字段
char separatorChar系统默认名称分隔符\\
char pathSeparatorChar系统默认路径分隔符
常见的方法
1.获取:文件名,文件路径,文件大小(不存在就0B),文件修改时间
注意文件路径:相对路径和绝对路径(从根目录开始)
2.创建与删除(文件、文件夹)
boolean-创建createNewFile()不存在就创建,存在就不创建,与输出来不同,每次 都是进行覆盖/或者续写 --只能操作的文件或目录,不可以操作里面的数据
删除boolean-delete() windows删除从里往外删除
创建单极或多级目录(删除多级目录--只会删除最里面的一个目录)
文件正在被访问不能删除
3.判断
先文件是否存在(是否目录/是否文件-针对存在)是否隐藏
4.重命名renameTo(File dest) 重命名文件
5.获取指定的当前目录下的文件及文件夹名称 String[]-list()
(包含隐藏的文件夹)
注意:封装File对象的时候必须是目录,不能是文件名
如果目录存在,会返回一个长度为0的数组
6.文件过滤器(重点)
list(FilenameFilter filter)-String[]
FilenameFilter--文件过滤器(接口)定义类--实现FilenameFilter接口
将该类的对象传递给List()方法
过滤器方法原理:先遍历目录,放在数组中并遍历,满足条件放在容器里面,
把集合转化为数组返回
7.深度变量文件夹--对指定目录的所有目录的列出[递归]
8.递归
* 一定要明确递归的条件,否则容易栈溢出
5.Map接口的子类Properties--可以和IO技术结合--Map集合的属性集
特点:集合中键和值都是字符串类型
集合中的数据可以保存在流中,或者从流中获取
作用:通常该集合用于操作以键值对形式存在的配置文件
配置文件:存储配置信息的文件,用于配置某些应用程序<键值对,xml,数据库>
遍历集合中元素:Set<String> stringPropertyNames()--变成集合,再迭代器
Properties与流的结合
list(PrintStream out)--直接将集合信息打印在控制台
store(OutputStream out, String comments)--将集合信息存储硬盘--这就叫持久化
两个参数,前面指定写的位置,后面字符串对数据进行描述--不要写中文注释
修改硬盘上存储的键值对信息
先读文件(保证里面是键值对)--放到集合--修改--存储
load(InputStream inStream) 读数据
java里面配置信息文件命名XX.properties/ini(windows系统)/xml文件
eg:记录程序使用的次数---使用Properties--仅仅是Properties一个使用方面
配置信息--通常用在保存应用程序的个性化设置(保存设置后关掉依然存在)
注意:递归过程保证容器唯一,不要将容器定义在方法里面,要传参数容器
定义方法的时候需要确定传入的参数--针对谁进行的处理

6.其他的流对象--辅助功能
打印流(不跑出异常):PrintStream--System.out返回值
构造方法:接收File,字符串路径,流out对象
常见方法:提供操作各种数据的打印方法。print方法保存数据的表示形式
print(97)--文件里面就是97,write(97)--会选择最低的1B存储不会保留形式
实现原理:将数字变成字符串然后写字符串
PrintWriter--使用平台默认编码方式
构造方法:接收File,字符串路径,流out对象,写字符流

序列流:SequenceInputStream--对于多个流的合并--只有处理源的对象
输入流的逻辑串联--把多条流封装为一条流(SequenceInputStream)
本质就是集合中装入多个流--最后一个流返回值当作是结束
将多个源合并成一个源
eg:文件切割(按照顺序切割)+文件合并
注意切割文件时候将文件类型和文件的个数存在一个配置文件里面,因为合并
的时候需要用到这些信息

对象流:ObjectInputStream/OutputStream--为了能够保存对象数据的关联性
存储的对象--在硬盘的文件里面(对象的持久化存储)对象流+文件流的配合使用
对象流的前提:要操作的对象必须实现serializable(标记接口)将对象转化为二进制数字流--对象要按照顺序存储在文件中--writeObject(Object obj)、readObject()
注意:*存储对象仅仅只是想延长对象的生命周期,所以并不关心写出去的格式。
*读对象所在文件时候必须使用基本流+对象流才能将数据转化为一个对象
*读对象的时候必须保证有该对象的类文件在内存在+写出去的文件--两个存在 才可以成功读对象--强制转型
*写对象--序列化;读对象--反序列化(类似于编码和解码)
*关于存储对象--存储的是对象的非静态成员变量(被transient修饰的也不会 写到对象文件里面--其他并无差别--非静态数据不想被序列化)
serializable(标记接口)存在的意义?--给类加ID
存储对象--序列化的时候得到一个序列化id号(对应的类也有相同的id号),再进行读对象的反序列化的过程中,会检测加载的类与原来的类的对象id是否一致,不一致就会发生异常,就不能读对象
不同版本的编译器可能编译的id结果不一致,解决办法自己定义对象序列化id号
ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;

RandomAccessFile--随机访问文件--不属于任何io的继承体系--字节流
特点
* 自身具备对随机访问文件的读写功能
* 该对象内部维护了一个byte数组,并通过指针可以操作数组中的元素--数组可以延长--自动扩展
* 可以设置和获取当前指针的位置
* 其实该对象将字节输入流和字节输出流的封装--为一个整体的工具对象
* 操作随机文件---只能是文件(源/目的)
* 构造方法的特殊之处--指定操作文件的模式(读写的控制四种可选)
* 该类里面有许多有用的方法读写基本数据类型(保证原本的字节数),字节数组等
* 如果文件不存在则创建,存在则不创建-不会覆盖
* 可以指定存储和写的位置,随机的对文件操作seek(long pos)--设置当前指针位置
没有指定的情况下是从0角标开始写(若原来存在则覆盖)
* 随机写--可以给任意位置写,可以从任意位置开始读
* 随机访问文件要求数据要有规律,长度可以进行规律的估计
* 小应用:利用多个线程负责不同地方的数据写数据(利用该类可以指定开始写位置)

PipedInputStream/PipedOutputStream-管道流[应用于多线程]
特点
* 输入流与输出流可以直接连接 read()<-->write()
* 管道流读必须要读管道流的输出
read()[阻塞方法没管道输出数据,就一直等待]-->write()[后面就执行不到]
程序就等待在这--一般用多线程可以处理该问题,写线程写出数据唤醒读线程
* 管道流内部含有一个缓冲区
* 需要调用connect()方法连接两个流

DataInputStream/DataOutputStream---操作基本数据类型
特点--保存基本数据类型的形态
* 使用结合+InputStream--读和写的类型必须一致
* writeUTF()--readUFT()对于使用(编码和解码是utf8修改版)自动添加的头信息

操作数组的流对象--[源与目都是内存上]
ByteArrayInputStream/ByteArrayOutputStream--用流的思想操作数组
特点
* 内存中存在可变长度的数组缓冲数据
* 不用关闭流(关闭流原因:调用底层的资源)--操作的内存不用底层的资源

* 不会抛出io异常
* ByteArrayInputStream(byte[] buf)--明确源内存
ByteArrayOutputStream()--自动包含数组--也可以指定缓冲区的大小
* 如果要操作的源是内存--直接就用ByteArrayInputStream
CharArrayReader/CharArrayWriter
StringReader/StringReader

7.常见的编码表
ASCII-可以是7bit字符
GBK--中文编码
unicode--统一处理方式固定长度编码--2B
utf-8--不固定长度的编码,最多可以用三个字节表示一个字符

时间: 2024-10-13 05:09:55

Java基础总结--IO总结2的相关文章

java基础之IO

java基础之IO 1,字节流与字符流常用方法: public class testIO { /** * 字符输入输出流实现文件的复制(类比字节操作) * @throws IOException * */ @Test public void testWriterReaderFileCopy() throws IOException{ Reader read = new FileReader("cyq1.txt"); Writer write = new FileWriter("

java基础篇IO流的规律

前两篇降了IO流中的字节流和字符流复制的例子,今天来总结一下IO流的规律 掌握好IO流的规律,再开发中会很好用 下面来总结一下: 1,明确源和目的 源:输入流 InputStream 和Reader 目的:输出流 OutputStream 和Writer 2,操作的数据是否是纯文本. 是:使用字符流 不是:使用字节流 3,当体系明确后,在明确要使用哪个具体的对象,通过设备来进行区分 源设备: 内存,硬盘,键盘 目的设备: 内存,硬盘,控制台 这里的源就是你想进行的操作,比如说你想从c盘复制一个文

JAVA 基础之 IO复习

一.文件: 在IO包中唯一与文件相关的类就是 File类. File类中常用的常量和方法 1.创建文件: 指定路径和将要创建的文件名字以及类型: 然后调用 createNewFile()方法 File file = new File("D:"+File.separator+"MyJavaProgram"+File.separator+"hello.java"); file.createNewFile(); 2.删除文件: 指定路径和文件,包括类型

Java基础: IO操作

最近抽了点时间回顾了java基础,昨天看了java的IO操作,把大致的总结写在这里. Java的IO操作主要是数据的输入.输出操作和文件管理,输入输出操作可以包括控制台.文件的输入输出和流的输入输出,流的输入输出可以用于文件,也可以用于网络数据. 控制台 控制台的输入输出中,输出大家最熟悉,最常用的就是System.out,那么输入操作可以用System.in,也可以System.console,区别是前者读入字节,后者读入字符串 文件处理 File类:可以实现对文件目录和文件的增删改,查看文件

java基础之IO流(一)

java基础之IO流(一)之字节流 IO流体系太大,涉及到的各种流对象,我觉得很有必要总结一下. 那什么是IO流,IO代表Input.Output,而流就是原始数据源与目标媒介的数据传输的一种抽象.典型数据源与目标媒介包括磁盘.网络.内存等等. IO流的分类: 按流向分为:输入流和输出流(本地内存为参考) 按处理数据单位:字符流和字节流 按照是否与特定的地方相连(磁盘.网络.内存):节点流和处理流 节点流:可以从或向一个特定的地方(节点)读写数据. 处理流:是对一个已存在的流的连接和封装,通过所

Java基础之IO技术(一)

---恢复内容开始--- Java基础中的IO技术可谓是非常重要,俗话说的好,万丈高楼起于垒土之间.所以学习Java一定要把基础学好,今天我们来学习IO技术的基础. IO无非就是输入与输出,而其中处理的数据无非是字符与字节.字符最简单的定义就是这个数据是否是纯文本组成,除此之外所有的都是字节.Java给我们提供了字符和字节的处理,其中字符的处理有Writer和Reader两个抽象父类(分别对应的是写和读),字节的处理有OutputStream和InputStream两个抽象类(分别对应的是写和读

java基础之IO操作

IO操作 ·文件类的使用(File) ·IO中流的基本使用(字符流.字节流.内存流.打印流) ·System类对IO的支持 ·对象序列化的问题 在整个的IO操作中,流的操作分为两种: ·字节流 字节输出流:OutputStream 字节输入流:InputStream ·字符流 字符输出流:Writer 字符输入流:Reader IO操作的基本步骤: 在Java的使用io的话,必须要按照以下的几个步骤进行(对文件操作来说): ·使用File找到一个文件 ·使用字节流或者字符流的子类为OutputS

Java 基础 - 基本 IO

基本 IO 重要接口 重要类 字节类 InputStream 特点: 读取字节流的抽象类 BufferedInputStream 特点: 用字节缓冲区来从 InputStream 中读取流 缓冲区默认大小是 8K, 可能会增长 实现了 mark() 和 reset() 方法 fill() 方法 ByteArrayInputStream 特点: 从内存中的字节数组的字节读取流 实现了 mark() 和 reset() DataInputStream 特点: 允许从下层流中以Java基本数据类型 一

Java基础总结--IO总结1

1.IO流(数据流)主要应用概述数据来源:存储在设备里面* IO流用来处理设备间数据之间的传输* Java对数据的操作是通过流的方式* Java用于对流的操作的对象都在IO包* 流按照流向分为:输出流(写动作)与输入流(读动作)(相对于程序来说) 读写的方式不同造成被封装成不同的对象* 按照一次操作数据的字节数目:字节流(1B)与字符流(2B)以前无字符流:ASCII码1B--表达英语的文字数字,随机计算机普及,为了表示更多国家的语言,兼容了许多国家的码表,这样不利于信息沟通,统一出了unico

java基础知识----IO篇

写在前面:本文章基本覆盖了java IO的全部内容,java新IO没有涉及,文章依旧以例子为主,因为讲解内容的java书很多了,我觉的学以致用才是真.代码是写出来的,不是看出来的. 最后欢迎大家提出意见和建议. [案例1]创建一个新文件 1 2 3 4 5 6 7 8 9 10 11 import java.io.*; class hello{     public static void main(String[] args) {         File f=new File("D:\\he