IO流总结补充

1.File类(java.io.File)可表示文件或者目录(在JAVA中文件和目录都属于这个类中,而且区分不是非常的明显)。
File下的方法是对磁盘上的文件进行磁盘操作,但是无法读取文件的内容。
注意:创建一个文件对象和创建一个文件在JAVA中是两个不同的概念。前者是在虚拟机中创建了一个文件,但却并没有将它真正地创建到OS的文件系统中,随着虚拟机的关闭,这个创建的对象也就消失了。而创建一个文件才是在系统中真正地建立一个文件。
例如:File f=new File(“11.txt”);//创建一个名为11.txt的文件对象
f.CreateNewFile();     //真正地创建文件

2.File的方法
Boolean createNewFile() //创建文件
Boolean mkdir() //创建目录
Boolean mkdirs() //创建多个目录
Boolean delete() //删除文件
Boolean deleteOnExit(); //在进程退出的时候删除文件,这样的操作通常用在临时文件的删除。
String[] List():返回当前File对象下所以显文件和目录名(相对路径)
File[] ListFiles():返回当前File对象所有Files对象,可以用getName()来访问到文件名。
isDirectory()和isFile()来判断究竟是目录还是文件。
String getParent()	得到父类文件名
File getParentFile()	。。。
String getPath()		。。。路径
exists() 判断文件是否存在
15.2.处理跨平台性
对于命令:File f2=new file(“d:\\abc\\789\\1.txt”)
这个命令不具备跨平台性,因为不同的OS的文件系统的分隔符是不相同。
使用file类的separtor属性,返回当前平台文件分隔符。
File newD = new File("aa"+File.separator+"bb"+File.separator+"cc");
       File newF = new File(newD,"mudi.txt");
       try{
       newD.mkdirs();
       newF.createNewFile();
       }catch(Exception e){}
3.对象的序列化接口
Serializable接口没有方法,是标识接口。
序列化的步骤:
1)实现Serializable 接口
2)实例化对象文件输出对象
3)将对象输出到文件里
4)有些临时变量生命周期不需要超过虚拟机的生命周期,需要加上:transient 关键字,这个属性不被序列化。

一个序列化对象内部属性的对象也需要序列化接口。

4.I/O流基础
Input/Output:指跨越出了JVM的边界,与外界进行数据交换。
              输出

              输入
注意:输入/输出是针对JVM而言。

15.5.流的分类
	1) 从数据类型分:字节流和字符流
字节流类:
抽象父类: InputStream,OutputStream
实现类:
			BufferedInputStream 缓冲流-过虑流
			BufferedOutputStream
			ByteArrayInputStream 字节数组流-节点流
			ByteArrayOutputStream
			DataInputStream	 处理JAVA标准数据流-过虑流
			DataOutputStream
			FileInputStream 处理文件IO流-节点流
			FileOutputStream
			FilterInputStream 实现过虑流-字节过虑流父类
			FilterOutputStream
			PipedInputStream 管道流
			PipedOutputStream
			PrintStream  包含print() 和 println()
			RandomAccessFile 支持随机文件
抽象父类:Reader, Writer
实现类:
			BufferedReader
			BufferedWriter
			PrintWriter
			CharArrayReader
			CharArrayWriter
			FileReader
			FileWriter
			FilterReader
			FilterWriter
			InputStreamReader
			OutputStreamWriter
			PipedReader
			PipedWriter
			StringReader
			StringWriter

   	2) 从数据方向分:输入流和输出流
			InputXXXXX  ,  OutputXXXXX
	3) 从流的功能分:节点流和过滤流(使用到油漆工模式)
			节点流用来传输数据。
			过滤流用来封装节点流或者其他过滤流,从而给节点流或其他的过滤流增加一个功能。

. InputStream类
所有字节输入流的父类,如:FileInputStream,ObjectInputStream,PipedInputStrean
1) 三个基本的read()方法
      a. int read(): 从流里读出的一个字节或者-1; (实际读了多长)
      b. int read(byte[]):将数据读入到字节数组中,并返回所读的字节数; (期望读了多长)
      c. int read(byte[], int , int):两个int参数指定了所要填入的数组的子范围。
2) 其它方法
      a. void close(): 关闭流,如使用过滤器流,关闭栈顶部的流,会关闭其余的流。
      b. int available(): 返回可从流中读取的字节数。
      c. skip(long): 丢弃了流中指定数目的字符。
      d. boolean markSupported()
      e. void mark(int)
      f. void rese()

2. OutputStream方法
答:1) 三个基本的read()方法
      a. void write():
      b. void write(byte[]):
      c. void write(byte[], int , int):
      写输出流。
   2) 其它方法
      a. void close(): 关闭流,如使用过滤器流,关闭栈顶部的流,会关闭其余的流。
      b. void flush(): 允许你强制执行写操作。
注:在流中close()方法由程序员控制。因为输入输出流已经超越了JVM的边界,所以有时可能无法回收资源。
原则:凡是跨出虚拟机边界的资源都要求程序员自己关闭,不要指望垃圾回收。

3. FileInputStream和FileOutputStream
答:1) 节点流,使用磁盘文件。
   2) 要构造一个FileInputStream, 所关联的文件必须存在而且是可读的。
   3) 要构造一个FileOutputStream而输出文件已经存在,则它将被覆盖。 	FileInputStream infile = new FileInputStream("myfile.dat");
   	FIleOutputStream outfile = new FileOutputStream("results.dat");
	FileOutputStream outfile = new FileOutputStream(“results.dat”,true);
		参数为true时输出为添加,为false时为覆盖。
	FileOutputStream类代码:(为什么能建文件)
		Public FileOutputStream(String name){
			This(name!=null?new File(String):null,false);
		}

键盘流
	PrintWriter : System.in
4.DataInputStream和DataOutputStream
为过滤流。通过流来读写Java基本类,注意DataInputStream和DataOutputStream的方法		是成对的。
	过滤流。输出输入各种数据类型。
	writeBoolean(boolean b) ------以1bit数据传送
	writeByte(int)	------以1 byte数据传送
	writeBytes(String s) --------以byte序列数据传送
	writeChar(int v) ――――――以 2 byte
	writeChars(String s)-------------以 2 byte序列
	writeDouble(double d)  -------以 8 byte
	writeInt(int v)
	writeLong(long l)
	writeShort(short s)
	writeUTF(String)-----------能输出中文!
6.ObjectInputStream和ObjectOutputStream
	过滤流。处理对象的持久化
	Object o = new Object();
	FileOutputStream fos=new FileOutputStream("Object.txt");
	ObjectOutputStream oos=new ObjectOutputStream(fos);
	oos.writeObject(o);
	oos.close();
	FileInputStream fis =new FileInputStream(“Object.txt”);
	ObjectInputStream ois =new ObjectInputStream(fis);
	Object o = (Object)Ois.readObject();
	ois.close();
7. 	BufferInputStream和BufferOutputStream
	过滤流,可以提高I/O操作的效率
	用于给节点流增加一个缓冲的功能。
在VM的内部建立一个缓冲区,数据先写入缓冲区,等到缓冲区的数据满了之后再一次性写出,效率很高。
使用带缓冲区的输入输出流的速度会大幅提高,缓冲区越大,效率越高。(这是典型的牺牲空间换时间)
切记:使用带缓冲区的流,如果数据数据输入完毕,使用flush方法将缓冲区中的内容一次性写入到外部数据源。用close()也可以达到相同的效果,因为每次close都会使用flush。一定要注意关闭外部的过滤流。

8. PipedInputStream和PipedOutputStream
	用来在线程间通信.
	PipedOutputStream pos=new PipedOutputStream();
		PipedInputStream pis=new PipedInputStream();
		try
		{
			pos.connect(pis);
			new Producer(pos).start();
			new Consumer(pis).start();
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
9.RandomAccessFile  随机访问
	可以得到文件指针。
long getFilePointer()  得到从文件开始处到文件指针的位置。
seek(long point)  将文件指针移动到此处。
10 Reader和Writer
	1) Java技术使用Unicode来表示字符串和字符,而且提供16位版本的流,以便用类似的方法处理字符。
   2) InputStreamReader和OutputStreamWriter作为字节流与字符流中的接口。
   3) 如果构造了一个连接到流的Reader和Writer,转换规则会在使用缺省平台所定义的字节编码和Unicode之间切换。
	4) 字节流与字符流的区别:
编码是把字符转换成数字存储到计算机中。把数字转换成相应的字符的过程称为解码。
编码方式的分类:
ASCII(数字、英文):1个字符占一个字节(所有的编码集都兼容ASCII)
ISO8859-1(欧洲):1个字符占一个字节
GB-2312/GBK:1个字符占两个字节
Unicode: 1个字符占两个字节(网络传输速度慢)
UTF-8:变长字节,对于英文一个字节,对于汉字两个或三个字节。

10
	都是过滤流。
	BufferedReader的方法:readLine():String
	PrintWriter的方法:println(….String,Object等等)和write()
11. 随机存取文件
	1) 实现了二个接口:DataInput和DataOutput;
   2) 只要文件能打开就能读写;
   3) 通过文件指针能读写文件指定位置;
   4) 可以访问在DataInputStream和DataOutputStream中所有的read()和write()操作;
   5) 在文件中移动方法:
      a. long getFilePointer(): 返回文件指针的当前位置。
      b. void seek(long pos): 设置文件指针到给定的绝对位置。
      c. long length(): 返回文件的长度。 

12.编码问题:
	编码的方式:
		每个字符对应一个整数。
		不同的国家有不同的编码,当编码方式和解码方式不统一时,产生乱码。
		因为美国最早发展软件,所以每种的编码都向上兼容ASCII 所以英文没有乱码。

ISO-8859-1    西方字符
		GB2312     。。。。。。镕
		GBK
		Big5
		Unicode
		UTF-8

补充:
	字节流结束返回 -1
	字符流结束返回null
	对象流结束返回 EOFException
引申---------〉异常经常被用在流程控制, 异常也是方法的一种返回形式。

时间: 2024-08-06 12:21:19

IO流总结补充的相关文章

装饰器模式及JAVA IO流例子★★★☆☆

一.什么是装饰模式 通过关联机制给类增加行为,其行为的扩展由修饰对象来决定: 二.补充说明 与继承相似,不同点在于继承是在编译期间扩展父类,而装饰器模式在运行期间动态扩展原有对象: 或者说,继承是对类进行扩展,装饰模式是对对象进行扩展: 三.角色 抽象构件 具体构件 抽象装饰类 具体装饰类 说明:具体构件.抽象装饰类.具体装饰类的共同父类是抽象构件,具体装饰类继承抽象装饰类并在运行期间装饰具体构件: 四.例子 例子说明: 画家接口Painter,为抽象构件,有两个方法,获取画家描述信息及绘画:

黑马程序员——IO流

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- IO流 IO流概述 IO流用来处理设备之间的数据传输.Java对数据的操作是通过流的方式.Java用于操作流的对象都在IO包中. 流按照流向分为两种:输入流和输出流. 输入流和输出流相对于内存设备而言.将外设中的数据读取到内存中:输入.将内存的数写入到外设中:输出. 流按照操作数据分为两种:字节流和字符流. 字节流读取文字字节数据后,不直接操作而是先查指定的编码表,获取对应的文字.再对这个文字

io流新闻管理系统实例(简单型)

1.新闻集合的使用+文件流的应用2.文件流序列化与反序列化对象的使用 一.创建新闻类 1 package com.news.entity; 2 3 import java.io.Serializable; 4 import java.util.Date; 5 6 /** 7 * 新闻实体类 8 * @author Direct 9 * 10 */ 11 public class NewsInfo implements Serializable{ 12 /** 13 * 14 */ 15 priv

【Java IO流】字节流和字符流详解

字节流和字符流 对于文件必然有读和写的操作,读和写就对应了输入和输出流,流又分成字节和字符流. 1.从对文件的操作来讲,有读和写的操作——也就是输入和输出. 2.从流的流向来讲,有输入和输出之分. 3.从流的内容来讲,有字节和字符之分. 这篇文章先后讲解IO流中的字节流和字符流的输入和输出操作. 一.字节流 1)输入和输出流 首先,字节流要进行读和写,也就是输入和输出,所以它有两个抽象的父类InputStream.OutputStream. InputStream抽象了应用程序读取数据的方式,即

Java学习总结(7)——(File类,IO流,(缓冲流,转换流等),Properties类)

一.File类 java.io.File类代表系统文件(文件和目录) 访问文件属性步骤 (1)创建文件对象 格式:File file=new File(String pathname); (2)调用方法:操作文件目录的属性(路径,权限,日期和时间等) File类的属性(separator默认名称分隔符) (1)在UNIX系统上,此字段的值为 '/ ';在window系统上,它为'\' (2)为了程序的跨平台性,文件的路径应该用这个属性值来代表 File类的常用方法 方法名称 说明 Boolean

IO流与NIO流

(转自CSDN) IO流上:概述.字符流.缓冲区(java基础) 一.IO流概述 概述: IO流简单来说就是Input和Output流,IO流主要是用来处理设备之间的数据传输,Java对于数据的操作都是通过流实现,而java用于操作流的对象都在IO包中. 分类: 按操作数据分为:字节流和字符流. 如:Reader和InpurStream 按流向分:输入流和输出流.如:InputStream和OutputStream IO流常用的基类: * InputStream    ,    OutputSt

Java之 IO流、字符流、字节流、缓冲流、对象流等各种流

File类:使用Java进行操作文件,通过一些方法进行操作.比如创建文件,删除文件,判断是否存在,文件大小,文件的目录等等,还有文件夹的一些操作. IO流:根据类别可以进行分类. 按照流向:输入流Input 输出流Output 按照字节个数:字节流和字符流 字节流: InputStream:抽象类,无法直接使用,通过其子类FileInputStream,从文件中获取字节. OutputStream:抽象类,无法直接使用,通过其子类FileOutputStream,向文件写入字节. 字符流: Re

Java中的IO流

Java中的IO流是实现输入/输出的基础. 按照流的方向不同:分为输入流和输出流. 按照处理数据单位的不同:分为字节流(8位)和字符流(16位). 按照功能不同:分为节点流和处理流 所有面向字节的流类都继承于InputStream类(输入流) 或OutputStream类(输出流),这两个类是抽象类,我们可以利用它的子类来完成不同的功能. InputStream.OutputStream都是抽象类 InputStream抽象了应用程序读取数据的方式 OutputStream抽象类应用程序写出数据

Java IO流 探险

Java的IO流使用了一种装饰器设计模式,它将IO流分为底层节点流和上层处理流.本篇重点在如何访问文件与目录.如何以二进制格式和文本格式来读写数据.对象序列化机制.还有Java7的"NIO.2". 装饰设计模式:当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有的功能,并提供加强功能.那么自定义的该类称为装饰类. 装饰类通常会通过构造方法接收被装饰的对象.并基于被装饰的对象的功能,提供更强的功能. IO的方式通常分为:BIO(同步阻塞).NIO(同步非阻塞).AIO