JAVA第十章 IO流

第十章 IO流

?小结(悄悄的,悄悄的,到第十章了。。。)
(1) 输入、输出流提供一条通道程序,可以使用这条通道读取源中的数据,或把数据送到目的地。
输入流的指向称作源,程序从指向源的输入流中读取源中的数据
输出流的指向称作目的地,程序通过向输出流中写入数据把信息传递到目的地。
在这里插入图片描述
(2)InputStream的子类创建的对象称为字节输入流,字节输入流按字节读取源中的数据,只要不关闭流,每次调用读取方法时就顺序地读取源中的其余的内容,直到源中的末尾或流被关闭。
(3)Reader的子类创建的对象称为字符输入流,字符输入流按字符读取源中的数据,只要不关闭流,每次调用读取方法时就顺序地读取源中的其余的内容,直到源中的末尾或流被关闭。
(4)OutPutStream的子类创建的对象称为字节输出流。字节输出流按字节将数据写入输出流指向的目的地中,只要不关闭流,每次调用写入方法就顺序地向目的地写入内容,直到流被关闭。
(5)Writer的子类创建的对象称为字符输出流。字符输出流按字符将数据写入输出流指向的目的地中,只要不关闭流,每次调用写入方法就顺序地向目的地写入内容,直到流被关闭
(6)使用对象流写入或读入对象时,要保证对象是序列化的。这是为了保证能把对象写入到文件,并能再把对象正确读回到程序中。使用对象流很容易获取一个序列化对象的克隆。我们只需将该对象写入对象输出流指向的目的地,然后将该目的地作为一个对象输入流的源,那么该对象输入流从源中读回的对象一定是原对象的一个克隆。

1.File类
  • File对象主要用来获取文件本身的一些信息,不涉及对文件的读写操作。
    创建一个File对象的构造方法有3个:
    File(String filename);
    File(String directoryPath,String filename);
    File(File f, String filename);

  • 目录
    1.创建目录- public boolean mkdir()
    2.列出目录中的文件
    public String[] list() 用字符串形式返回目录下的全部文件。
    public File [] listFiles() 用File对象形式返回目录下的全部文件。
    public String[] list(FilenameFilter obj) 用字符串形式返回目录下的指定类型的所有文件。
    public File [] listFiles(FilenameFilter obj) 用File对象形式返回目录下的指定类型所有文件。
    上述两方法的参数FilenameFilter是一个接口,该接口有一个方法:
    public boolean accept(File dir,String name);

  • 文件的创建与删除
    当使用File类创建一个文件对象后,例如
    File file=new File(“c:\myletter”,“letter.txt”);
    ◆如果c:\myletter目录中没有名字为letter.txt文件,
    文件对象file调用方法 public boolean createNewFile();
    可以在c:\myletter目录中建立一个名字为letter.txt的文件。
    ◆文件对象调用方法 public boolean delete()
    可以删除当前文件,例如:
    file.delete();

2.文件字节输入流

java.io包提供了大量的流类,Java把InputStream抽象类的子类创建的流对象称作字节输入流 OutputStream抽象类的子类创建的流对象称作字节输出流,Java把Reader抽象类的子类创建的流对象称作字符输入流,Write抽象类的子类创建的流对象称作字符输出流
针对不同的源或目的地,java.io包为程序提供了相应的输入流或输出流,这些输入、输出流绝大部分都是InputStream、OutputStream、Reader或Writer的子类。

使用输入流通常包括4个基本步骤:
(1)设定输入流的源
(2)创建指向源的输入流
(3)让输入流读取源中的数据
(4)关闭输入流。

  • 构造方法
    使用FileInputStream类的下列构造方法创建指向文件的输入流。
    FileInputStream(String name);
    FileInputStream(File file);

    参数name和file指定的文件称为输入流的源。
  • 使用输入流读取字节
    文件字节流可以调用从父类继承的read方法顺序地读取文件,只要不关闭流,每次调用read方法就顺序地读取文件中的其余内容,直到文件的末尾或文件字节输入流被关闭。
    ◆int read() 读取单个字节的数据,返回字节值(0~255整数),如果未读出字节就返回-1。
    ◆ int read(byte b[]) 读取b.length个字节到字节数组b中,返回实际读取的字节数。如果到达文件的末尾,则返回-1。
    ◆ int read(byte b[], int off, int len) 读取len个字节到字节数组b中,并返回实际读取的字节数目。如果到达文件的末尾,则返回-1,参数off指定从字节数组的某个位置开始存放读取的数据。
3.文件字节输出流

使用输出流通常包括4个基本步骤:
(1)给出输出流的目的地
(2)创建指向目的地的输出流
(3)让输出流把数据写入到目的地
(4)关闭输出流。

  • 构造方法
    使用FileOutputStream类的下列具有刷新功能的构造方法创建指向文件的输出流。
    FileOutputStream(String name);
    FileOutputStream(File file);

    参数name和file指定的文件称为输出流的目的地
  • 使用输出流写字节
    输出流的wirie方法以字节单位向目的地写数据。
    void write(int n) 向目的地写入单个字节。
    void write(byte b[]) 向目的地写入一个字节数组。
    void write(byte b[],int off,int len) 从字节数组中偏移量off处取len个字节写到目的地。
4.字节数组流

字节数组输入流ByteArrayInputStream和字节数组输出流ByteArrayOutputStream分别使用字节数组作为流的源和目标。
◆ ByteArrayInputStream构造方法及常用方法
ByteArrayInputStream(byte[] buf);
ByteArrayInputStream(byte[] buf,int offset,int length);
public int read();顺序地从源中读出一个字节
public int read(byte[] b,int off,int len);顺序地从源中读出参数len指定的字节数
◆ ByteArrayOutputStream流构造方法及常用方法
ByteArrayOutputStream();
ByteArrayOutputStream(int size);
public void write(int b); 顺序地向缓冲区写入一个字节
public void write(byte[] b,int off,int len); 将参数b中指定的len个字节顺序地写入缓冲区
public byte[] toByteArray(); 返回输出流写入到缓冲区的全部字节

FileOutputStream流顺序地写文件,只要不关闭流,每次调用write方法就顺序地向目的地写入内容,直到流被关闭。

  • 关闭流
    通过调用close()方法,可以保证操作系统把流缓冲区的内容写到它的目的地,即关闭输出流可以把该流所用的缓冲区的内容冲洗掉(通常冲洗到磁盘文件上)。


5.文件字符输入输出流

1.Reader类提供的read方法 以字符为单位顺序地读取源中的数据。
int read():
int read(char b[]):
int read(char b[], int off, int len):
void close():
long skip(long numBytes):

2. Writer流以字符为单位顺序地写文件,每次调用write方法就顺序地向目的地写入内容。 Writer类有如下常用的方法。
void write(int n): 向输出流写入一个字符。
void write(byte b[]): 向输出流写入一个字符数组。
void write(byte b[],int off,int length): 从给定字符数组中起始于偏移量off处取len个字符写到输出流。
void close(): 关闭输出流。

字符数组流
CharArrayReader和CharArrayWriter类是字符数组流,使用字符数组作为流的源和目标。

下面是除了字节流,字符流的其他东西?、

  • ?缓冲流
    1.BufferedReader和BufferedWriter类创建的对象称作缓冲输入、输出流。二者的源和目的地必须是字符输入流和字符输出流。
    构造方法:
    BufferedReader(Reader in);
    BufferedWriter (Writer out);

    2.BufferedReader和BufferedWriter类读写文件的方法:
    readLine() 读取文本行
    write(String s,int off,int len) 把字符串s写到文件中
    newLine(); 向文件写入一个回行符

  • ?随机流
    使用RandomAccessFile类来创建一个随机访问文件流。 RandomAccessFile类创建的流的指向既可以作为源也可以作为目的地。
    构造方法:
    RandomAccessFile(String name,String mode) ;
    RandomAccessFile(File file,String mode) ;
    ◆相关方法:
    seek(long a) 定位RandomAccessFile流的读写位置
    getFilePointer() 获取流的当前读写位置
    ◆ readLine()方法 在读取含有非ASCII字符的文件时出现“乱码”现象的方法:
    1.读取 String str=in.readLine();
    2.用“iso-8859-1”重新编码 byte b[]=str.getBytes(“iso-8859-1”);
    3.使用当前机器的默认编码将字节数组转化为字符串
    String content=new String(b);

  • ?数据流
    DataInputStream和DataOutputStream类创建的对象称为数据输入流和数据输出流。
    构造方法:
    DataInputStream(InputStream in)
    创建的数据输入流指向一个由参数in指定的底层输入流
    DataOutputStream(OutnputStream out)创建的数据输出流指向一个由参数out指定的底层输出流

  • ?对象流
    ObjectInputStream和ObjectOutputStream类创建的对象称为对象输入流和对象输出流。
    它的构造方法是:
    ObjectInputStream(InputStream in)
    ObjectOutputStream(OutputStream out)

    ◆相关方法:
    writeObject(Object obj) 将一个对象obj写入到一个文件
    readObject() 读取一个对象到程序中
    ◆所谓序列化:一个类如果实现了Serializable接口,那么这个类创建的对象就是所谓序列化的对象。



1.使用scanner解析文件
  • 使用默认分隔标记解析文件
    创建Scanner对象,并指向要解析的文件,例如:
    File file = new File(“hello.java”);
    Scanner sc = new Scanner(file);

    sc将空白作为分隔标记
    相关方法
    ?next()依次返回file中的单词
    ? hasNext()判断file最后一个单词是否已被next()方法返回.
2.使用正则表达式作为分隔标记解析文件

创建Scanner对象,指向要解析的文件,
并使用useDelimiter方法指定正则表达式作为分隔标记,例如:
File file = new File(“hello.java”);
Scanner sc = new Scanner(file);
sc.useDelimiter(正则表达式);

sc将正则表达式作为分隔标记
相关方法 next() 依次返回file中的单词
hasNext() 判断file最后一个单词是否已被next()方法返回


小结图解
在这里插入图片描述

这章源码没放,初学,我还不会,若干个月后再说呀??

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值