Java IO流

一、File类

File类的对象主要用来获取文件本身的一些信息,例如文件所在的目录、文件的长度或文件读写权限等,不涉及对文件的读写操作
构造方法:

 FileString filename); //filename是文件名字
 File (String directoryPath,String filename); //directoryPath是文件的路径
 File (File dir,String filename);

常用方法:

//文件的属性
public String getName(); //获取文件的名字
public boolean canRead(); //判断文件是否是可读的
public boolean canWrite(); //判断文件是否可被写入
public boolean exists(); //判断文件是否存在
public long length(); //获取文件的长度(单位是字节)
public Sring getAbsolutePath(); //获取文件的绝对路径
public Sring getParent(); //获取文件的父目录
public boolean isFile(); //判断文件是否是一个普通文件, 而不是目录
public boolean isDirectory(); //判断文件是否是一个目录
public boolean isHidden(); //判断文件是否是隐藏文件
public long lastModified(); //获取文件最后修改时间
//目录
public boolean mkdir ();  //创建一个目录
public String[ ] list(); //用字符串形式返回目录下的全部文件。
public File [ ] listFiles(); //用File对象形式返回目录下的全部文件。
public String list (FilenameFilter obj); //方法用字符串形式返回目录下的指定类型的所有文件。
public File [] listFiles (FilenameFiter obj); //该方法用File对象形式返回目录下的指定类型的所有文件。

二、流

Java对数据的操作是通过流的方式, IO流用来处理设备之间的数据传输
IO流的分类:

  • 按流向分类:输入流和输出流

  • 按操作类型分类:
    字节流 : 字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的
    字符流 : 字符流只能操作纯字符数据,比较方便。

  • 按流的角色不同分类:节点流、处理流/包装流

(抽象基类)字节流字符流
输入流InputStreamReader
输出流OutputStreamWriter

使用输入/输出流的步骤:

  • 设定输入流的源/给出输出流的目的地
  • 创建指向源的输入流/创建指向目的地的输入流
  • 让输入流读取源中的数据/让输出流把数据写入目的地
  • 关闭输入/输出流

1.节点流

可以从或向一个特点的地方(节点)读写数据
父类:InputStream OutputStream Reader Writer
常用的节点流:

  • 文件 FileInputStream FileOutputStream FileReader FileWriter 文件进行处理的节点流
  • 字符串 StringReader StringWriter 对字符串进⾏处理的节点流。
  • 数组 ByteArrayInputStream ByteArrayOutputStream CharArrayReader CharArrayWriter 对数组进⾏处理的节点流(对应的不再是⽂
    件,⽽是内存中的⼀个数组)。
  • 管道 PipedInputStream PipedOutputStream PipedReaderPipedWriter对管道进⾏处理的节点流。

随机流

RandomAccessFile类创建的流称作java随机流,RandomAccessFile类既不是InputStream类的子类,也不是OutputStream类的子类。随机流不属于IO流,支持对文件的读取和写入随机访问。当准备对一个文件进行读写操作时,创建一个指向该文件的随机流即可,这样既可以从这个流中读取文件的数据,也可以通过这个流写入数据到文件。
随机流是一种具备双向传输能力的特殊流。IO流中的各个流都只能实现单向的输入或输出操作,如果想对一个文件进行读写操作就要建立两个流。随机流 Random Access File 类创建的流既可以作为输入流,也可以作为输出流,因此建立一个随机流就可以完成读写操作。
构造方法:

RandomAccessFile (String name,String mode); 
//name确定文件,给出创建流的源和目的地,mode取r(只读)或rw(读写)决定访问权限
RandomAccessFileFile file,String mode);
//file是一个File对象,给出创建流的源和目的地

2.处理流

是对⼀个已存在的流的连接和封装,通过所封装的流的功能调⽤实现数据读写。处理流的构造⽅法总是要带⼀个其他的流对象做参数。⼀个流对象经过其他流的多次包装,称为流的链接。
常用的处理流:

  • 缓冲流:BufferedInputStrean BufferedOutputStream BufferedReader BufferedWriter增加缓冲功能,避免频繁读写硬盘。
  • 转换流:InputStreamReader OutputStreamReader实现字节流和字符流之间的转换。
  • 数据流 DataInputStream DataOutputStream 等-提供将基础数据类型写⼊到⽂件中,或者读取出来。

缓冲流

是处理流的⼀种,对I/O进⾏缓冲是⼀种常见的性能优化,缓冲流为I/O流增加了内存缓冲区。
基本原理:创建流对象时候,会创建⼀个内置的默认⼤⼩的缓冲区数组,
通过缓冲区书写.
目的:

  • 允许Java的I/O⼀次不只操作⼀个字符,这样提⾼䇖整个系统的性能;
  • 由于有缓冲区,使得在流上执⾏skip、mark和reset⽅法都成为可能。

1.BufferedInputStream
构造方法:

BufferedInputStream(InputStream in) //使⽤默认buf⼤⼩、底层字节输⼊流构建bis 
BufferedInputStream(InputStream in, int size) //使⽤指定buf⼤⼩、底层字节输⼊流构建bis

常用方法:

nt available();  //返回底层流对应的源中有效可供读取的字节数
void close();  //关闭此流、释放与此流有关的所有资源
boolean markSupport();  //查看此流是否⽀持mark
void mark(int readLimit); //标记当前buf中读取下⼀个字节的下标
int read();  //读取buf中下⼀个字节
int read(byte[] b, int off, int len);  //读取buf中下⼀个字节
void reset();   //重置最后⼀次调⽤mark标记的buf中的位⼦
long skip(long n);  //跳过n个字节、不仅仅是buf中的有效字节、也包括in的源中的字节

2.BufferedOutputStream
构造方法:

BufferedOutputStream(OutputStream out); //使⽤默认⼤⼩、底层字节输出流构造bos。默认缓冲⼤⼩是 8192 字节( 8KB )
BufferedOutputStream(OutputStream out, int size);  //使⽤指定⼤⼩、底层字节输出流构造bos

常用方法:

void  flush(); //将写⼊bos中的数据flush到out指定的⽬的地中、注意这⾥不是flush到out中、因为其内部⼜调⽤了out.flush()  
write(byte b); //将⼀个字节写⼊到buf中
write(byte[] b, int off, int len); //将b的⼀部分写⼊buf中

3.BufferedWriter
构造方法:

BufferedWriterWriter out); //创建⼀个使⽤默认⼤⼩输出缓冲区的缓冲字符输出流。
BufferedWriterWriter out,int sz); //创建⼀个使⽤给定⼤⼩输出缓冲区的缓冲字符输出流。

常用方法:

public void write(int c); //写⼊单个字符。
public void write(char[ ] cbuf); //写⼊字符数组。
abstract void write(char[ ] cbuf,int off,int len); //写⼊字符数组的某⼀部分,off数组的开始索引,len写的字符个数。
void write(String str); //写⼊字符串。
void write(char[ ] cbuf,int off,int len); //写⼊字符数组的某⼀部分,off字符串的开始索引,len写的字符个数。
void flush(); //刷新该流的缓冲。
public void close(); //关闭此流,但要先刷新它。
void newLine(); //写⼊⼀个⾏分隔符。会根据不同的操作系统,获取不同的⾏分隔符。

4.BufferedReader
构造方法:

BufferedReaderReader in); //创建⼀个使⽤默认⼤⼩的输⼊缓冲区的缓冲字符输⼊流。
BufferedReaderReader in); //创建⼀个使⽤是定⼤⼩输⼊缓冲区的缓冲字符输⼊流。

常用方法;

nt read()——读取单个字符并返回。
int read(char[ ] cbuf); //⼀次读取多个字符,将字符读⼊数组。
void close(); //关闭该流并释放与之关联的所有资源。
String readLine( ); //读取⼀个⽂本⾏。读取⼀⾏数据。

转换流

转换流提供了两种⽤于将字节流转换为字符流的转换流。其中InputStreamReader⽤
于将字节输⼊流转换为字符输⼊流,其中OutputStreamWriter⽤于将字节输出流转
换为字符输出流。
InputStreamReader类常用方法:

InputStreamReader(InputStream in); //创建⼀个使⽤默认字符集的InputStreamReader对象
InputStreamReader(InputStream in,Charset cs); //创建⼀个使⽤指定字符集的InputStreamReader对象
InputStreamReader(InputStream in,CharsetDecoder dec); //创建⼀个使⽤指定字符解码器InputStreamReader对象
InputStreamReader(InputStream in,String str); //创建⼀个使⽤指定字符集InputStreamReader对象
getEncoding(); //返回当前流使⽤的字符编码名称

OutputStreamWriter类常用方法:

OutputStreamWrider(OutputStream out); //创建⼀个使⽤默认字符集的OutputStreamWrider对象
OutputStreamWrider((OutputStream out,Charset cs); //创建⼀个使⽤指定字符集的OutputStreamWrider对象
OutputStreamWrider((OutputStream out,CharsetDecoder dec);  //创建⼀个使⽤指定字符解码器的OutputStreamWrider对象
OutputStreamWrider((OutputStream out,String str); //创建⼀个使⽤指定字符集的OutputStreamWrider对象
getEncoding(); //返回当前流使⽤的字符编码名称

IO流的关闭

IO流在创建后要用close方法关闭。关闭输出流时要首先关闭缓冲输出流,然后关闭缓冲输出流指向的流,即先关闭上层流再关闭底层流。在编写代码时只需要关闭上层流,那么上层流的底层流就会自动关闭

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值