ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:21.35KB ,
资源ID:11358041      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11358041.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(IO流之其他功能类详解.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

IO流之其他功能类详解.docx

1、IO流之其他功能类详解IO包其他功能流及字符编码详解打印流(PrintStream和PrintWriter)该流提供了打印方法,可以将各种数据类型的数据都原样打印字节打印流:PrintStream构造函数可以接受的参数类型a) File对象 Fileb) 字符串路径。Stringc) 字节输出流。OutputStream字符打印流:PrintWriter构造函数可以接受的参数类型a) File对象 Fileb) 字符串路径。Stringc) 字节输出流。OutputStreamd) 字符输出流.Writer我们开发常用的是printWriter,那么printWriter有什么常用的方法呢?a

2、) 特殊构造方法:PrintWriter(OutputStream out, boolean autoFlush):如果为true,可以自动刷新println,printf,formatb) void println(String s);打印我们用这些方法来演示下PrintWriter的基本方法:import java.io.*;class PrintWriterDemo public static void main(String args) throws IOException method(); public static void method() throws IOException

3、 BufferedReader br= new BufferedReader(new InputStreamReader(System.in); PrintWriter pw=new PrintWriter(new FileWriter(a.txt),true); String line=null; while (line=br.readLine()!=null) if (over.equals(line) break; pw.println(line.toUpperCase();/ /pw.flush(); br.close(); pw.close(); 合并流(SequenceInputS

4、tream)我们首先将一个mp3文件切割成一个个碎片,这里就涉及到IO流的应用,我们把切割代码演示如下:import java.io.*;class SpilteDemo public static void main(String args) throws IOException spite(); public static void spite()throws IOException FileInputStream fis=new FileInputStream(1.mp3); FileOutputStream fos=null; byte buf=new byte1024*1024; i

5、nt len=0; int count=1; while(len=fis.read(buf)!=-1) /每次循环我们都创建一个写入流,保存到递增的文件中 fos=new FileOutputStream(c:/splitest/+(count+)+.part); fos.write(buf,0,len); fos.close(); fis.close(); 然而我们有时需要将文件合并到一起,那么我们怎么办呢?我们这时就需要一个IO流的合并流合并流(SequenceInputStream)即将多个流合并成一个流,即多个文件合并成一个文件构造方法:SequenceInputStream(Enum

6、eration e):接收一个Enumeration类型参数,需要用到集合我们通过代码简单演示下如何将之前MP3文件合并在一起:import java.io.*;import java.util.*;class SequenceInputStreamDemo public static void main(String args) throws IOException /只有Vector才有Enumeration Vector v=new Vector(); v.add(new FileInputStream(c:/splitest/1.part); v.add(new FileInputSt

7、ream(c:/splitest/2.part); v.add(new FileInputStream(c:/splitest/3.part); v.add(new FileInputStream(c:/splitest/4.part); v.add(new FileInputStream(c:/splitest/5.part); v.add(new FileInputStream(c:/splitest/6.part); v.add(new FileInputStream(c:/splitest/7.part); v.add(new FileInputStream(c:/splitest/8

8、.part); Enumeration e=v.elements(); /创建一个合并流,且构造方法传入的必须是Enumeration类型 SequenceInputStream sis=new SequenceInputStream(e); /将多个文件的数据传入到4.txt BufferedOutputStream bw= new BufferedOutputStream(new FileOutputStream(c:/mp3/1.mp3); int len=0; while(len=sis.read()!=-1) bw.write(len); sis.close(); bw.close(

9、); 对象流(对象序列化 ObjectStream)对象流是可以将对象以序列化的方式存入到一个文件里,对象流有非常重要的两个类,该两个类是成对出现的。ObjectOutputStream:将对象存储到一个文件中存储方法:void writeObject(Object obj)ObjectInputStream:操作输出对象流一保存的数据,通常和ObjectOutputStream成对使用。读取方法:void readObject();我们基本演示下将Person对象存入到文件中:import java.io.*;class ObjectDemo public static void main(

10、String args) throws Exception writeObj();/要先写再读 readObj(); public static void readObj()throws Exception ObjectInputStream ois=new ObjectInputStream(new FileInputStream(object.txt); Person p=(Person)ois.readObject(); System.out.println(p); ois.close(); public static void writeObj()throws IOException

11、ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(object.txt); oos.writeObject(new Person(zhangsan,13); oos.close(); class Person implements Serializable/必须要实现这个接口,是对象序列化 String name; int age; Person(String name,int age) this.age=age; this.name=name; public String toString() return

12、name+:+age; 注意:a) 当我们该掉Person任何一个成员属性时,再读取就会出错,是因为java内部有个叫UID的长整型的编号将Person中的属性编号,无论改变成员变量值还访问权限,都会报错,读取失败,如果想改变而又不读取失败,可以加上这段代码:ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;红色的是任何访问修饰符。、b) 我们想存储的对象的类必须要实现一个接口Serializable,是其对象序列化c) 要存储的对象类中成员属性不能是static修饰的,这样无法序列化,当然我们想让成员变量无法序列化也可在

13、其加上transient管道流(PipedStream)管道流是IO中一个非常特殊的流,他是和多线程联系在一起的。管道流输入输出是连接在一起的。输入流:PipedInputStream输出流:PipedOutputStream管道流的输入输出连接是通过两种方法实现:a) 构造一个无参数的构造方法,使用connect()方法去连接输入和输出b) 构造一个有参数的构造方法,传入的是自己的输入或者输出流我们基本演示下管道流的应用:import java.io.*;class Read implements Runnable PipedInputStream pis; Read(PipedInputS

14、tream pis) this.pis=pis; public void run() try byte buf=new byte1024; System.out.println(没有数据,线程没有阻塞); int len=pis.read(buf); System.out.println(读取数据中。阻塞结束); String str=new String(buf,0,len); System.out.println(str);/打印读取到的数据 pis.close(); catch (Exception e ) throw new RuntimeException(管道流输入失败); cla

15、ss Write implements Runnable PipedOutputStream pos; Write(PipedOutputStream pos) this.pos=pos; public void run() try System.out.println(开始写入数据,等待6秒后); Thread.sleep(6000); pos.write(haha,pioed is come.getBytes(); pos.close(); catch(Exception e) throw new RuntimeException(管道流输出失败); class PipedIODemo p

16、ublic static void main(String args) throws Exception PipedInputStream pis=new PipedInputStream(); PipedOutputStream pos=new PipedOutputStream(); pis.connect(pos);/连接输入和输出 new Thread(new Read(pis).start();/开启读取线程 new Thread(new Write(pos).start();/开启写入线程 随机访问流(RandomAccessFile)该类是随机访问文件的一个类,该类不能算是IO体

17、系中子类,而是直接继承自Object,但是它是IO包中的成员,因为他具备读和写功能。其内部封装了一个byte数组,对字节输出输入进行封装。通过索引的方式对数组中的元素进行操作。通过指针对数组的元素进行操作。我们可以通过getFIlePointer获取指针位置。同时可以通过seek改变指针的位置。局限性:只对文件操作。随机访问的原理:就是通过操作索引的方法对指针进行自定义的指定位置来进行读写其实完成读写的原理就是内部封装了字节输入流和输出流。但它有一个局限性就是通过构造方法可以看出,该类只能操作文件,而且操作文件还有模式。模式:a) r:以只读方式打开b) rw:打开以便读取和写入c) rws:

18、打开以便读取和写入d) rwd:打开以便读取和写入如果模式为只读r,不会创建文件,会去读取一个已存在文件,如果该文件不存在,则会出现文件找不到(FileNotFoundException)异常。如果模式为rw,操作的文件不存在,会自动创建,如果存在,不会覆盖。而且该对象的构造函数要操作的文件不存在,会自动创建。如果存在,不会覆盖。我们基本演示下该类的用法:import java.io.*;class RandomAccessFileDemo public static void main(String args) throws IOException writeFile_2(); /readF

19、ile(); public static void readFile()throws IOException RandomAccessFile raf=new RandomAccessFile(ran.txt,r); byte buf=new byte4; /调整对象中的指针 /raf.seek(8); /跳过指定的字节数 raf.skipBytes(8); raf.read(buf); String name=new String(buf); System.out.println(name:+name); int age=raf.readInt(); System.out.println(a

20、ge:+age); public static void writeFile()throws IOException RandomAccessFile raf=new RandomAccessFile(ran.txt,rw); raf.write(张三.getBytes(); /写入Int类型,以免超出无法保存,一般开发够用了 raf.writeInt(97); raf.write(王五.getBytes(); raf.writeInt(99); raf.close(); /* 写入文件数据的随机性 */ public static void writeFile_2()throws IOExc

21、eption RandomAccessFile raf=new RandomAccessFile(ran.txt,rw); /可以随机控制要写入的字节位置 raf.seek(8*0); raf.write(周期.getBytes(); raf.writeInt(101); raf.close(); 总结:该类三种特殊的地方:首先它有有一个模式控制文件的读写操作,然后它有一个seek方法控制写入字节的位置,最后他的写入读取有多种基本类型,我们常用的是writeInt方法。该类经常用在文件的下载,我们要重点掌握。基本数据类型流(DataStream)其用于操作基本数据类型的流 输入流: DataI

22、nputStream 输出流 DataOutputStream我们通过代码演示,基本的了解下DataStream的用法:import java.io.*;class DataStreamDemo public static void main(String args) throws IOException /writeData(); readData(); public static void writeData()throws IOException DataOutputStream dos=new DataOutputStream(new FileOutputStream(data.txt

23、); /我们按照什么顺序写入什么基本类型数据 dos.writeInt(289); dos.writeBoolean(true); dos.writeDouble(988.26); dos.close(); public static void readData()throws IOException DataInputStream dis=new DataInputStream(new FileInputStream(data.txt); /我们就按照什么顺序读取什么基本类型。必须按顺序,否则取出来乱码 int num=dis.readInt(); Boolean b=dis.readBoo

24、lean(); Double d=dis.readDouble(); System.out.println(num); System.out.println(b); System.out.println(d); 注意这两个类个分别有特殊的方法是专门用来输入和读取UTF的方法,我们只能对应的去取文件的数据。这两个方法分别是readUTF(),writeUTF()。我们演示下这两个方法的用法:import java.io.*;class DataStreamDemo public static void main(String args) throws IOException /writeUTFD

25、ata(); readUTFData(); public static void writeUTFData()throws IOException DataOutputStream dos=new DataOutputStream(new FileOutputStream(utfdata.txt); dos.writeUTF(你好);/writeUTF只能解析中文 dos.close(); public static void readUTFData()throws IOException DataInputStream dis=new DataInputStream(new FileInpu

26、tStream(utfdata.txt); String s=dis.readUTF(); System.out.println(s); 基本数据类型数组流(ByteArrayStream)ByteArrayStream是用来操作字节数组的流对象,是写入到内存的特殊的流ByteArrayInputStream:在构造的时候,需要接收数据源,而且数据源是一个字节数组。构造方法:ByteArrayInputStream(byte buf)ByteArrayOutputStream:在构造的时候,不用定义数据目的,因为该对象中已经内部封装了可变长度的字节数组,这就是数据目的地、构造方法:ByteAr

27、rayOutputStream()常用的方法:a) int size:返回缓冲区的当前数组大小b) String toString:将缓冲区内容转换为字符串c) void writeTo(OutputStream out):将byte数组全部内容存到指定输入流文件中,这段代码需要抛IOException。因为是两个流对象都操作的数组,并没有使用系统资源,所以不用进行close关闭,且没有涉及到文件或者键盘等操作,所以不用抛IOException。这个类就是用流的读写思想操作数组 我们来通过代码基本演示下这个流:import java.io.*;class ArrayStreamDemo pub

28、lic static void main(String args) /数据源 ByteArrayInputStream bais=new ByteArrayInputStream(ABCDEFG.getBytes(); /数据目的 ByteArrayOutputStream baos=new ByteArrayOutputStream(); int a=0; while (a=bais.read()!=-1) baos.write(a); System.out.println(baos.size();/缓冲区的大小 System.out.println(baos.toString();/唯一取出数组的方法 总结:我们不仅有操作字节数组的,还有其他的基本类型数组操作,他们基本用法是一致的:操作字符数组CharArrayReader与CharArrayWrite 操作字符串StringReader 与StringWriter字符编码我们常用的编码表是UTF8和GBK,UTF-8是国际码表,一个汉字占三个字节,GBk是中国的码表,一个汉字占两个字节。字节转换字符只能用IO流两个类a) InputStreamReader和outputStrea

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1