Input/Output:指跨越出了JVM的边界,与外界数据的源头或者目标数据源进行数据交换。
注意:输入/输出是针对JVM而言。
File类(java.io.*)可表示一个文件,也有可能是一个目录(在JAVA中文件和目录都属于这个类中,而且区分不是非常的明显)。
Java.io下的方法是对磁盘上的文件进行磁盘操作,但是无法读取文件的内容。
注意:创建一个文件对象和创建一个文件在JAVA中是两个不同的概念。前者是在虚拟机中创建了一个文件,但却并没有将它真正地创建到OS的文件系统中,随着虚拟机的关闭,这个创建的对象也就消失了。而创建一个文件才是在系统中真正地建立一个文件。
File f=new File(“11.txt”);//创建一个名为11.txt的文件对象
f.CreateNewFile(); //真正地创建文件
f.CreateMkdir()://创建目录
f.delete();//删除文件
f.deleteOnExit();//在进程退出的时候删除文件,这样的操作通常用在临时文件的删除。
对于命令:File f2=new File(“d:\\abc\\789\\1.txt”)
这个命令不具备跨平台性,因为不同的OS的文件系统很不相同。
如果想要跨平台,在file类下有separtor(),返回锁出平台的文件分隔符。
File.fdir=new File(File.separator);
String str=”abc”+File.separator+”789”;
使用文件下的方法的时候一定注意是否具备跨平台性。
List():显示文件的名(相对路径)
ListFiles():返回Files类型数组,可以用getName()来访问到文件名。
FileFilter文件过滤器接口,覆盖accept()方法。
使用isDirectory()和isFile()来判断究竟是文件还是目录。
使用I/O流访问file中的内容。
JVM与外界通过数据通道进行数据交换。
分类:
按流分为输入流和输出流;
按传输单位分为字节流和字符流;
按功能还可以分为节点流和过滤流。
节点流:负责数据源和程序之间建立连接;
File,Piped,FileReader,ReandomAccessFile
过滤流:用于给节点增加功能。
过滤流的构造方式是以其他流位参数构造(这样的设计模式称为装饰模式)。
字节输入流:io包中的InputStream为所有字节输入流的父类。
Int read();读入一个字节(每次一个);
可先使用new byte[]=数组,调用read(byte[] b)
read (byte[])返回值可以表示有效数;read (byte[])返回值为-1表示结束。
字节输出流:io包中的OutputStream位所有字节输入流的父类。
Write和输入流中的read相对应。
在流中close()方法由程序员控制。因为输入输出流已经超越了JVM的边界,所以有时可能无法回收资源。
原则:凡是跨出虚拟机边界的资源都要求程序员自己关闭,不要指望垃圾回收。
以Stream结尾的类都是字节流。
如果构造FileOutputStream的同时磁盘会建立一个文件。如果创建的文件与磁盘上已有的文件名重名,就会发生覆盖。
用FileOutputStream中的boolean,则视,添加情况,将数据覆盖重名文件还是将输入内容放在文件的后面。(编写程序验证)
DataOutputStream:输入数据的类型。
因为每中数据类型的不同,所以可能会输出错误。
所有对于:DataOutputStream
DataInputStream
两者的输入顺序必须一致。
过滤流:
bufferedOutputStream
bufferedInputStream
用于给节点流增加一个缓冲的功能。
在VM的内部建立一个缓冲区,数据先写入缓冲区,等到缓冲区的数据满了之后再一次性写出,效率很高。
使用带缓冲区的输入输出流的速度会大幅提高,缓冲区越大,效率越高。(这是典型的牺牲空间换时间)
切记:使用带缓冲区的流,如果数据数据输入完毕,使用flush方法将缓冲区中的内容一次性写入到外部数据源。用close()也可以达到相同的效果,因为每次close都会使用flush。一定要注意关闭外部的过滤流。
(非重点)管道流:也是一种节点流,用于给两个线程交换数据。
PipedOutputStream
PipedInputStream
输出流:connect(输入流)
RondomAccessFile类允许随机访问文件
GetFilepoint()可以知道文件中的指针位置,使用seek()定位。
Mode(“r”:随机读;”w”:随机写;”rw”:随机读写)
练习:Copy 写一个类A,JAVA A file1 file2
file1要求是系统中已经存在的文件。File2是还没有存在的文件。
执行完这个命令,那么file2就是file1中的内容。
字符流:reader\write只能输纯文本文件。
FileReader类:字符文件的输出
字节流与字符流的区别:字符流应用不是很广泛.
字节流的字符编码:
字符编码把字符转换成数字存储到计算机中,按ASCii将字母映射为整数。
把数字从计算机转换成相应的字符的过程称为解码。
编码方式的分类:
ASCII(数字、英文):1个字符占一个字节(所有的编码集都兼容ASCII)
ISO8859-1(欧洲):1个字符占一个字节
GB-2312/GBK:1个字符占两个字节
Unicode: 1个字符占两个字节(网络传输速度慢)
UTF-8:变长字节,对于英文一个字节,对于汉字两个或三个字节。
原则:保证编解码方式的统一,才能不至于出现错误。
Io包的InputStreamread称为从字节流到字符流的桥转换类。这个类可以设定字符转换方式。
OutputStreamred:字符到字节
Bufferread有readline()使得字符输入更加方便。
在I/O流中,所有输入方法都是阻塞方法。
Bufferwrite给输出字符加缓冲,因为它的方法很少,所以使用父类printwriter,它可以使用字节流对象,而且方法很多。
class ObjectOutputStream也是过滤流,使节点流直接获得输出对象。
最有用的方法:WriteObject(Object b)
用流传输对象称为对象的序列化,但并不使所有的对象都可以进行序列化的。只有在实现类时必须实现一个接口:IO包下的Serializable(可序列化的)。此接口没有任何的方法,这样的接口称为标记接口。
Class Student implements Serializable
把对象通过流序列化到某一个持久性介质称为对象的可持久化。
Hibernate就是研究对象的可持久化。
ObuectInputStream in =new ObjectInputStream;
Object o1=in.readObuect();
Student s1=(Student)o1;
注意:因为o1是一个对象,因为需要对其进行保存。
Transient用来修饰属性。
Transient int num;
表示当我们对属性序列化时忽略这个属性(即忽略不使之持久化)。
所有属性必须都是可序列化的,特别是当有些属性本身也是对象的时候,要尤其注意这一点。
判断是否一个属性或对象可序列化:Serialver。
Serialver TestObject(TestObject必须为已经编译)
执行结果:如果不可序列化;则出现不可序列化的提示。如果可以序列化,那么就会出现序列化的ID:UID。
java.until.*有
StringTokenizer(参数1,参数2)按某种符号隔开文件
StringTokenizer(s,”:”) 用“:”隔开字符,s为对象。
分享到:
相关推荐
JAVA文件I/O流上传类 MyFileSeparate 文件上传
java I/O流处理的ppt,详细描述了I/O的各个流,对学习很有帮助!
描述java的I/o系统,描述了java中文件系统的处理,数据流的处理
适合初学者学习使用的流案例,绝对使用。
使用Java编写的一个可使用I/O读写文件的通讯录,具体可实现添加联系人、删除联系人、修改联系人、查看联系人等,无前端页面控制台输入输出 学习JavaI/O流的可下载学习
数据流的概念及输入输出方法 字节流和字符流 文件、文件流 随机访问文件 过滤流 管道流 对象流 数据流小结
Java I/O 流代码实例大全(01~09) File、FileInputStream、FileOutputStream、FileReader、FileWriter、BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter
这是一篇关于javaSe的基础班关于IO流的全套总结,希望能对你的基础学习有所帮助。
Java中的I/O学习总结Java中的I/O学习总结
读取写入文件,javai/o流字符流 eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
OReilly.Java.I.O.2nd.Edition.May.2006 Java的io包主要包括: 1. 两种流:字节流(byte Stream)和字符流(character stream),这两种流不存在所谓的谁代替谁、谁比谁高级之说,它们互为补充,只是侧重点不同...
本系统是基于JAVA开发平台,运用Socket网络编程,I/O文件流,线程,Swing图形界面等技术,实现的一套标准化考试系统。通过该系统可以完成多个科目的标准化考试工作。 该系统共分为三个模块:考生客户端,服务器端和...
Java I/O详细笔记
Java I/O, 2nd Edition
I/O流与文件入门学习实验案例,了解文件对象和流类的使用过程。
在一些视频服务中,如VOD推流的快进、快退中,经常需要快速从ts节目流中找出I帧(I-frame)来,以便推流服务器可以推送只包含视频画面而没有声音的ts数据到终端,而终端并不需要做任何特殊处理,即可实现快进/快退的...
Java I/O字符流复制文档,字节流复制歌曲等 自己定义
java i/o练习题,附带答案 主要练习输入,输出流...
NULL 博文链接:https://zhycaf.iteye.com/blog/981738
主要介绍了Java使用I/O流读取文件内容的方法,结合实例形式详细分析了java使用I/O流读取文件常见操作技巧,需要的朋友可以参考下