1.IO流的分类
概述:
IO:输入/输出(Input/Output)
流:是一种抽象概念,对数据传输的总称。也就是说数据在设备间的传输称为流,流的本质是数据传输
IO流就是用来处理设备间数据传输问题的
常见的应用:文件复制;文件上传;文件下载
分类:
--按照“流”的数据流向,可以将其化分为:输入流和输出流
--按照“流”中处理数据的单位,可以将其区分为:字节流和字符流。
--字节流的抽象基类:
InputStream,OutputStream
字符流的抽象基类:
Reader,Writer
2.file类:
概述:java.io.File类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。
构造方法:
// 文件路径名
String pathname = "D:\\aaa\\bbb.txt";
File file2 = new File(pathname);
// 通过父路径和子路径字符串
String parent = "d:\\aaa";
String child = "bbb.txt";
File file3 = new File(parent, child);
// 通过父级File对象和子路径字符串
File parentDir = new File("d:\\aaa");
String child = "bbb.txt";
File file4 = new File(parentDir, child);
常见方法:
public String getAbsolutePath() ` :返回此File的绝对路径名字符串。
public String getPath() :将此File转换为路径名字符串。
public String getName() :返回由此File表示的文件或目录的名称。
public long length() :返回由此File表示的文件的长度。
public class FileGet {
public static void main(String[] args) {
File f = new File("d:/aaa/bbb.java");
System.out.println("文件绝对路径:"+f.getAbsolutePath());
System.out.println("文件构造路径:"+f.getPath());
System.out.println("文件名称:"+f.getName());
System.out.println("文件长度:"+f.length()+"字节");
File f2 = new File("d:/aaa");
System.out.println("目录绝对路径:"+f2.getAbsolutePath());
System.out.println("目录构造路径:"+f2.getPath());
System.out.println("目录名称:"+f2.getName());
System.out.println("目录长度:"+f2.length());
}
}
输出结果:
文件绝对路径:d:\aaa\bbb.java
文件构造路径:d:\aaa\bbb.java
文件名称:bbb.java
文件长度:636字节
目录绝对路径:d:\aaa
目录构造路径:d:\aaa
目录名称:aaa
目录长度:4096
3.字节流:
字节流抽象基类
InputStream:这个抽象类是表示字节输入流的所有类的超类
OutputStream:这个抽象类是表示字节输出流的所有类的超类
输入流相关读写方法:
int read() //从输入流读取一个8位的字节,转换成0~255之间的整数。
int read(byte [] b) //从输入流读取若干字节,保存到字节数组中,返回的整数表示读取字节的数目
int read(byte[] b,int off,int len)//从输入流读取若干字节,保存到指定的字节数组中,off指定字节数组开始保存数据的起始下标, len表示读取的字节数目
带缓冲区的字符输入流:BufferedReader:
字节缓冲流:
BufferOutputStream:该类实现缓冲输出流。通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用
BufferInputStream:创建BufferInputStream将创建一个内部缓冲区数组。当从流中读取或跳过字节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次很多字节
输出流相关方法:
void write(int b)//向输出流写入一个字节。
void write(byte[] b)//把参数b指定的字节数组的所有字节写到输出流。
void write(byte [] b,int off,int len)//将指定byte数组从偏移量off开始的len个字节写入输出流。
三、输出、输出流结合使用:copy
4.字符流:
字符流抽象基类:
Reader:输入流、继承自Reader的流都是用于向程序中输入数据的,且数据单位都是字符16位
Writer:输出流、继承自Writer的流都是程序用于向外输出数据的,且数据单位都是字符(16位)
字符输入流:
1.Reader:
方法:
protected Reader() 创建一个新的字符流 reader,其重要部分将同步其自身的 reader。
protected Reader(Object lock) 创建一个新的字符流 reader,其重要部分将同步给定的对象。参数:lock - 要同步的对象。
//试图将字符读入指定的字符缓冲区。缓冲区可照原样用作字符的存储库:所做的唯一改变是 put 操作的结果。不对缓冲区执行翻转或重绕操作。
//返回:添加到缓冲区的字符数量,如果此字符源位于缓冲区末端,则返回 -1
int read(CharBuffer target)
//读取单个字符,返回:作为整数读取的字符,范围在 0 到 65535 之间 (0x00-0xffff),如果已到达流的末尾,则返回 -1
int read()
//将字符读入数组。返回每次所读取进入字符数组字符的个数,如果已到达流末尾,则返回 -1
int read(char[] cbuf)
//将字符读入数组的某一部分。返回每次所读取进入字符数组字符的个数,如果已到达流末尾,则返回 -1
int read(char[] cbuf, int off, int len)
//参数:cbuf - 目标缓冲区
//参数:off - 开始存储字符处的偏移量
//参数:len - 要读取的最多字符数
打印输入流PipedReader:
方法:
PipedReader() 创建尚未连接的 PipedReader。
PipedReader(int pipeSize) 创建一个尚未连接的 PipedReader,并对管道缓冲区使用指定的管道大小。
PipedReader(PipedWriter src) 创建连接到传送 writer src 的 PipedReader。
PipedReader(PipedWriter src, int pipeSize) 创建一个 PipedReader,使其连接到管道 writer src,并对管道缓冲区使用指定的管道大小
缓存流BufferedReader:
构造方法
BufferedReader(Reader in)创建一个使用默认大小输入缓冲区的缓冲字符输入流
BufferedReader(Reader in, int sz)创建一个使用指定大小输入缓冲区的缓冲字符输入流
非继承方法
String readLine()
//读取一个文本行。通过下列字符之一即可认为某行已终止:换行 ('\n')、回车 ('\r') 或回车后直接跟着换行。
//返回:包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null
转换流InputStreamReader:
构造方法
InputStreamReader(InputStream in) 创建一个使用默认字符集的 InputStreamReader。
InputStreamReader(InputStream in, Charset cs) 创建使用给定字符集的 InputStreamReader。
InputStreamReader(InputStream in, CharsetDecoder dec) 创建使用给定字符集解码器的
InputStreamReader InputStreamReader(InputStream in, String charsetName) 创建使用指定字符集的 InputStreamReader。
非继承方法
String getEncoding() 返回此流使用的字符编码的名称。
字符输出流:
1.Writer:
构造方法
protected Writer() 创建一个新的字符流 writer,其关键部分将同步 writer 自身。
protected Writer(Object lock) 创建一个新的字符流 writer,其关键部分将同步给定的对象
字符输出方法
void write(char[] cbuf) // 写入字符数组。
void write(char[] cbuf, int off, int len) //写入字符数组的某一部分。
void write(int c ) //写入单个字符。
void write(String str) // 写入字符串。
void write(String str, int off, int len) //写入字符串的某一部分。
2.打印输出流PrintWriter:
构造方法
在这里插入代码片//使用指定文件创建不具有自动行刷新的新 PrintWriter。
PrintWriter(File file)
//创建具有指定文件和字符集且不带自动刷行新的新 PrintWriter
PrintWriter(File file, String csn)
// 创建具有指定文件名称且不带自动行刷新的新
PrintWriter(String fileName)
// 创建具有指定文件名称和字符集且不带自动行刷新的新
PrintWriter PrintWriter(String fileName, String csn)
// 创建不带自动行刷新的新 PrintWriter。
PrintWriter PrintWriter(Writer out)
//根据现有的 OutputStream 创建不带自动行刷新的新 PrintWriter。
PrintWriter(OutputStream out)
//通过现有的 OutputStream 创建新的 PrintWriter。
PrintWriter(OutputStream out, boolean autoFlush)
//创建新 PrintWriter,如果为 true,则 println、printf 或 format 方法将刷新(flush)输出缓冲区,默认false
PrintWriter(Writer out, boolean autoFlush
3.转换流OutputStreamWriter:
构造方法:
OutputStreamWriter(OutputStream out)创建使用默认字符编码的 OutputStreamWriter。
OutputStreamWriter(OutputStream out, Charset cs)创建使用给定字符集的 OutputStreamWriter。
OutputStreamWriter(OutputStream out, CharsetEncoder enc) 创建使用给定字符集编码器的OutputStreamWriter。
OutputStreamWriter(OutputStream out, String charsetName) 创建使用指定字符集的 OutputStreamWriter
非继承方法:
String getEncoding() 返回此流使用的字符编码的名称。
4.缓冲输出流: BufferedWriter:
构造方法
BufferedWriter(Writer out )创建一个使用默认大小输出缓冲区的缓冲字符输出流。
BufferedWriter(Writer out, int sz) 创建一个使用给定大小输出缓冲区的新缓冲字符输出流。
非继承方法
void newLine() 写入一个行分隔符。
public void newLine() throws IOException {write(lineSeparator);}