版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第10章 输入、输出流,java的IO操作,Java语言是一种追求软件系统运行环境无关性的跨平台语言,为此Java平台将应用程序间、应用程序与磁盘文件之间的数据传输抽象为各种类型的流对象,将文件系统中的文件抽象为File对象。,Java.io包,Java语言中提供了比较完善的处理文件和输入输出数据的功能,实现这些I/O操作的类和接口都在java包中。java.io包中提供了各种各样的输入输出流类,它们都是Object类的直接子类,每一个流类代表一种特定的输入或输出流。,基本流类的继承关系,java.lang.Object,InputSream,OutputStream,Reader,Write
2、r,File,RandomAccess,10.1 File类,一个File类的对象,代表了磁盘上的文件或目录。 File类提供了与平台无关的方法对磁盘上的文件和目录进行操作,File类的构造方法,File(String filename) File(File f,String filename) File(String directoryPath,String filename) File(URL url),import java.io.*; class FileTest public static void main(String args) throws Exception File f=
3、new File(test.txt); f.createNewFile(); ,10.1.1文件属性,File类定义了一些方法获取文件本身的一些信息。,用于获取文件属性的函数,public String getName() public boolean canRead() public boolean canWrite() public boolean exists() public long length() public String getAbsolutePath() public String getParent(),用于获取文件属性的函数,public boolean isFile(
4、) public boolean isDirectory() public boolean isHidden() public long lastModified(),10.1.2 目录,创建目录,File对象调用方法public boolean mkdir()创建一个目录,如果创建成功返回true否则返回false。,列出目录中的文件,public String list() 或public File listFiles() 可使用: public String list(FilenameFilter obj)方法列出文件名中含有指定串的文件名。FilenameFile是一个接口,在使用时需
5、要重写其public boolean accept(File dir,String regex)方法。,绝对路径的分隔符,separator是一个与系统无关的分隔符。,import java.io.*; class FileTest public static void main(String args) throws Exception File f=new File(File.separator); String filename=javalesson+File.separator+File+File.separator+1.txt; File fn=new File(f,filename
6、); fn.createNewFile(); ,10.1.3 文件的创建与删除,boolean createNewFile():建立一个新文件 mkdir():建立一个目录 delete():删除一个文件或目录,临时文件的建立与删除,createTempFile(String prefix,String suffix):创建临时文件。 deleteOnExit():在程序结束时删除文件。,import java.io.*; class FileTest public static void main(String args) throws Exception for(int i=0;i5;i+
7、) File f=File.createTempFile(hit,.tmp); f.deleteOnExit(); Thread.sleep(3000); ,10.1.4 运行可执行文件,当要执行一个本地机上的可执行文件时,可以使用java.lang包中的Runtime类。首先使用Runtime类声明一个对象: Runtime ec; ec=Runtime.getRuntime(); ec.exec(“notepad.exe”),10.2 字节流与字符流,流的概念,所谓流是指同一台计算机或网络中不同计算机之间有序运动着的数据序列,Java把这些不同来源和目标的数据都统一抽象为数据流。数据流可分
8、为输入流和输出流,输入流流代表从其他流入计算机的数据序列,输出流代表从计算机流向处部设备的数据序列。流序列中的数据可以是没有进行加工的原始数据,也可以是经过编码的符合某种格式规定的数据,Java中提供了不同的流类对象对它们进行处理。,在IO包的这些类中,作为Object类的直接子类,基本输入流和基本输出流是处理以8位字节为基本单位字节流,读写以字节为单位进行;Reader和Writer类是专门处理16位字符流的类,读写以字符为单位进行。它们都是抽象类。提供了所有子类共用的一些读写操作,子类在此基础上通过实现某些接口,完成对数据的读写。因此,不能用这些抽象类来创建对象,当程序需要向外部设备输入或
9、输出数据时,需要创建该类的子类对象。,流的分类,节点流:从特定的地方读取的流类。例如磁盘或一片内存。 过滤流:使用节点流作为输入输出,过滤流使用一个已经存在的输入或输出流创建连接的。,InputStream,abstract int read():读取一个字节并返回。到文件尾返回-1。 int read(byte b):将数据读入一个字节数组同时返回实际读取的字节数。到文件尾返回-1 int read(byte int off,int len):将数据读入一个字节数组同时返回实际读取的字节数。off指定数组b中起始的偏移量,len是读入的最大值。,long skip(long n):跳过n个字
10、节,并返回跳过的字节数 int available():返回在不发生阻塞的情况下,可以读取的字节数。 void close():关闭输入流并释放也这个流相关的系统资源。 void mark(int readlimit):在输入流的当前位置设置标记,如果读取的字节数多于readlimit则忽略这一标记 void reset():返回到上一个标记 boolean markSupported():测试当前流是否支持标记。,java.io包中InputStream类层次,InputStream,OutputStream,abstract void write(int b):向输出流写一个字节。 voi
11、d write(byte b):向输出流写一个字节数组。 void write(byte b,int off,int len):向输出流中写一个字节数组中,从off开始的len个字节。,void flush():刷新输出流,强制缓冲区中的数据写出。 void close():关闭输出流,关闭与输出流相关的系统资源。,java.io包中OutputStream类层次,OutputStream,System.in/out对象,class StreamTest public static void main(String args) throws Exception int data; while(
12、data=System.in.read()!=-1) System.out.write(data); ,FileInputStream/FileOutputStream是节点流是用于从文件中读取或向文件中写入数据的字节流。,10.3 文件字节流,java语言提供了专门用于读写文件的子类: FileInputStream和FileOutputStream。,10.3.1 文件字节输入流,FileInputStream类提供以字节为单位读入文件中的信息。FileInputStream类的构造方法是: FileInputStream(String name) FileInputStream(File
13、 file) FileInputStream提供read方法用于读取文件。,FileInputStream实例,import java.io.*; class StreamTest public static void main(String args) throws Exception FileInputStream fis=new FileInputStream(mytext.txt); byte bytes=new byte100; int len=fis.read(bytes); System.out.println(new String(bytes,0,len); ,10.3.2 文
14、件字节输出流,可使用FileOutputStream类来创建指向该文件的字节输出流。其构造方法是: FileOutputStream(String name) FileOutputStream(File file) FileOutputStream使用write(byte b)向文件写数据。 如果文件不存在FileOutputStream会创建新文件,如果存在则刷新其内容。,FileOutputStream实例,import java.io.*; class StreamTest public static void main(String args) throws Exception Fil
15、eOutputStream fos=new FileOutputStream(mytext.txt); fos.write(I am great!.getBytes(); fos.close(); ,10.4 文件字符流,字节流文件以字节为基本单位处理读写数据,不能操作Unicode字符。因此在读写Unicode字符时java提供了FileReader和FileWriter字符流。同样使用read()和write()方法读写数据,10.5 缓冲流,BufferedReader和BufferedWriter类创建的对象称作缓冲输入、输出流,二者增强了读写文件的能力。提高了读写文件的效率。如Buf
16、feredReader和BufferedWriter提供了整行字符读写数据的能力。其构造方法是: BufferedReader(Reader in) BufferedWriter(Writer out) 注:缓冲流需要不能单独使用,只能连接在字符流的后端。,缓冲流的读写方法,readLine方法:可以整行读入数据 write(String s,int off,int len)和 newLine();配合可以整行写入方法,字节缓冲流,BufferedInputStream/BufferedOutputStream是过滤流,需要使用已经存在的节点流来构造。提供了带缓冲的读写提高了读写效率。在这个流
17、中真正地实现了mark方法和reset方法。缓冲输出流中真正地实现了flush()方法。,BufferedOutputStream,import java.io.*; class StreamTest public static void main(String args) throws Exception FileOutputStream fos=new FileOutputStream(mytext.txt); BufferedOutputStream bos=new BufferedOutputStream(fos); bos.write(BufferedOutputStream!.ge
18、tBytes(); bos.flush(); bos.close(); ,BufferedInputStream,import java.io.*; class StreamTest public static void main(String args) throws Exception FileInputStream fis=new FileInputStream(mytext.txt); BufferedInputStream bis=new BufferedInputStream(fis); byte bytes=new byte100; int len=fis.read(bytes)
19、; System.out.println(new String(bytes,0,len); fis.close(); ,10.6 随机流,RandomAccessFile同时实现了DataInput和DataOutput接口,提供了对文件进行随机存取的功能。可以利用这个类对文件的任何位置进行读写操作。 RandomAccessFile提供了一个文件指针,用来标志要进行读写操作的下一个数据的位置 RandomAccessFile提供了对Java基本数据类型的读写方法。,RandomAccessFile的构造方法,RandomAccessFile(String name,/文件名 String m
20、ode)/访问方式 RandomAccessFile(File file/文件对象 String mode)/访问方式 访问方式mode可以取”r”和”rw”,分别代表读和读写。,RandomAccessFile常用方法(),void writeInt(int v):写入一个整数 void writeFloat(float v):写入一个浮点数 void writeDouble(double v):写入一个双精度数。,RandomAccessFile常用方法(),void writeBytes(String s):将串中的每个字符的第一个字节写入。丢弃第个字节。 void writeChars
21、():写入一个字符串。 void writeUTF(String s):西文每个字符写入一个字节,而中文每个字符写入三个字节写入一个字符串,同时其第一个字节记录其串的长度。,RandomAccessFile常用方法(),int readInt():读入一个整数。 double readDouble():读入一个双精度数。 String readUTF():读入一个字符串。 long length():返回一个文件的长度。,RandomAccessFile常用方法(4),long length():返回一个文件的长度。 seek(long position):将文件指针移动到指定位置。 其余方法
22、参看书上表10.1,10.7 数组流*,以的源和目标除了可以是文件外,还可以是内存,字节数组流,ByteArrayInputStream和ByteArrayOutput分别使用字节数组作为源和目标。,ByteArrayInputStream的构造方法,ByteArrayInputStream(byte buf); ByteArrayInputStream(byte buf, int offset, int length),读操作方法,public byte read():顺序地从源中读出一个字节,该方法返回读出的字节值; public int read(byte b,int off,int l
23、en):在源中的offset位置处读出len个字节。该方法返回读出的字节数。如果未读出返回-1。,ByteArrayOutputStream构造方法,ByteArrayOutputStream() ByteArrayOutputStream(int size),读操作方法,public void write(int b) public void write(byte b,int off,int len):,public byte toByteArray():可返回输出流写入到缓冲区的全部字节。,字符数组流,字符数组流CharArrayReader和CharArrayWrite类,字符数组作为流
24、的源目标。,10.8 数据流,DataInputStream/DataOutputStream是过滤流,需要从已有的节点流构造,提供了读写Java基本数据的功能。实现了DataInput和DataOutput接口。在接口中定义了对Java基本数据类型的读取方法。,DataOutputStream,import java.io.*; class StreamTest public static void main(String args) throws Exception byte b=100; int i=200; float f=300.0f; char c=a; FileOutputStr
25、eam fos=new FileOutputStream(mytext.txt); /BufferedOutputStream bos=new BufferedOutputStream(fos); DataOutputStream dos=new DataOutputStream(fos); dos.writeByte(b); dos.writeInt(b); dos.writeFloat(b); dos.writeChar(b); dos.close(); ,DataInputStream,import java.io.*; class StreamTest public static vo
26、id main(String args) throws Exception FileInputStream fis=new FileInputStream(mytext.txt); BufferedInputStream bis=new BufferedInputStream(fis); DataInputStream dis=new DataInputStream(fis); System.out.println(dis.readByte(); System.out.println(dis.readInt(); System.out.println(dis.readFloat(); Syst
27、em.out.println(dis.readChar(); fis.close(); ,10.9 对象流,ObjectInputSteam和ObjectOutputStream类分别是InputStream和OutputStream类的子类。ObjectInputStream和ObjectOutputStream类创建的对象称为对象输入注和对象输出流。对象输出流使用writeObject(Object obj)方法将一个对象obj写入到一个文件,对象输入流使用readObject()从文件中读取对象。 ObjectInputStream和ObjectOutputStream是过滤流。需要依附一个节点流。,10.10 序列化与对象克隆,对象的序列化,当使用对象流写入或读入对象时,要保证对象是序列化的。一个类如
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建设10万吨每年石脑油吸附分离项目可行性研究报告模板-立项拿地
- 2026年高等学校教师岗前培训暨教师资格笔题库(得分题)附参考答案
- 乐东县一级建造师考试(通信与广电工程管理与实务)真题及答案
- 2026年四川省绵阳市“五方面人员”中选拔乡镇领导班子成员考试全真冲刺试题及答案
- 突发事件应急后勤保障指南
- 稽留流产临床处置与术后调养共识 (2026 版)
- 护理应急预案与灾难应对
- Gilvocarcin-V-intermediate-1-生命科学试剂-MCE
- FR194738-free-base-Standard-生命科学试剂-MCE
- Fluorescein-NAD-sodium-生命科学试剂-MCE
- 华润守正评标专家考试题库及答案
- 2025辽宁沈阳副食集团及所属企业招聘2人参考题库及答案解析(夺冠)
- 北京某高层办公楼施工组织设计(创鲁班奖)
- 2025年业财一体信息化应用1+X证书中级考试(含答案解析)
- 腹痛急诊科常见病处理流程
- 升白针健康科普
- 操场提升方案
- DB51∕T 3042-2023 四川省野生杓兰属植物保护技术规程
- 基于人工智能的初中物理跨学科实践教学研究-以DeepSeek技术应用为例
- 2025贵州安顺市统计局所属事业单位选调工作人员考试参考试题及答案解析
- 高级电工考核培训课件
评论
0/150
提交评论