IO流
IO流概述
可以将这种数据传输操作,看做一种数据的流动,按照流动的方向分为输入 Input 和 输出 Output
java 中的 IO 操作主要指的是 Java.io 包下的一些常用类的使用,通过这些常用类对数据进行读取(输入 Input)和 写出(输出 Output)
IO流的分类
按照流的方向来分,可以分为:输入流和输出流
按照流动的数据类型来分,可以分为:字节流和字符流
字节流:
- 输入流:InputStream
- 输出流:OutputStream
字符流:
- 输入流:Reader
- 输出流:Writer
字节流
java.io.OutputStream
常用方法
变量和类型 | 方法 | 描述 |
---|---|---|
void | close() | 关闭此输出流并释放与此流关联的所有系统资源。 |
void | flush() | 刷新此输出流并强制写出任何缓冲的输出字节。 |
void | write(byte[] b) | 将 b.length 字节从指定的字节数组写入此输出流。 |
void | write(byte[] b, int off, int len) | 将从偏移量 off 开始的指定字节数组中的 len 字节写入此输出流。 |
abstract void | write(int b) | 将指定的字节写入此输出流。 | |
java.io.FileOutputStream
构造方法
构造器 | 描述 |
---|---|
FileOutputStream(File file) | 创建文件输出流以写入由指定的 File 对象表示的文件。 |
FileOutputStream(FileDescriptor fdObj) | 创建要写入指定文件描述符的文件输出流,该文件描述符表示与文件系统中实际文件的现有连接。 |
FileOutputStream(File file, boolean append) | 创建文件输出流以写入由指定的 File 对象表示的文件。 |
FileOutputStream(String name) | 创建文件输出流以写入具有指定名称的文件。 |
FileOutputStream(String name, boolean append) | 创建文件输出流以写入具有指定名称的文件。 |
package txet;
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo {
public static void main(String[] args) throws IOException {
//FileOutputStream 一个字节
FileOutputStream fileOutputStream = new FileOutputStream("d://a.txt");
//写入65
fileOutputStream.write(65);
//关闭流
fileOutputStream.close();
System.out.println("已经写出");
//FileOutputStream 数组
FileOutputStream fileOutputStream = new FileOutputStream("d://a.txt");
//写入
byte[] bytes = {65,66,67,68,69};
fileOutputStream.write(bytes);
//关闭流
fileOutputStream.close();
System.out.println("已经写出");
//FileOutputStream
FileOutputStream fileOutputStream = new FileOutputStream("d://a.txt");
//写入65
//byte[] bytes = {65,66,67,68,69};
byte[] bytes = "ABCDEF".getBytes();
fileOutputStream.write(bytes,1,3);
//关闭流
fileOutputStream.close();
System.out.println("已经写出");
}
}
java.io.InputStream
常用的方法
变量和类型 | 方法 | 描述 |
---|---|---|
void | close() | 关闭此输入流并释放与该流关联的所有系统资源。 |
abstract int | read() | 从输入流中读取下一个数据字节int |
int | read(byte[] b) | 从输入流中读取一些字节数并将它们存储到缓冲区数组 b 。 |
java.io.FileInputStream
构造方法
构造器 | 描述 |
---|---|
FileInputStream(File file) | 通过打开与实际文件的连接来创建 FileInputStream ,该文件由文件系统中的 File 对象 file 命名。 |
FileInputStream(String name) | 通过打开与实际文件的连接来创建 FileInputStream ,该文件由文件系统中的路径名 name 命名。 |
常用方法
变量和类型 | 方法 | 描述 |
---|---|---|
void | close() | 关闭此文件输入流并释放与该流关联的所有系统资源。 |
int | read() | 从此输入流中读取一个字节的数据。 |
int | read(byte[] b) | 从此输入流 b.length 最多 b.length 字节的数据读 b.length 字节数组。 |
package txet;
import java.io.FileInputStream;
public class Demo {
public static void main(String[] args) throws IOException {
//FileInputStream
FileInputStream fileInputStream = new FileInputStream("D://a.txt");
//读取
byte b = (byte) fileInputStream.read();
System.out.println((char)b);
//关闭流
fileInputStream.close();
//FileInputStream
FileInputStream fileInputStream = new FileInputStream("D://a.txt");
//读取
while(true){
byte b = (byte) fileInputStream.read();
//判断读取到-1,就停止读取
if ( b == -1){
break;
}
System.out.println((char)b);
}
//关闭流
fileInputStream.close();
//FileInputStream
FileInputStream fileInputStream = new FileInputStream("D://a.txt");
//读取
byte[] bytes = new byte[10];
int len = fileInputStream.read(bytes);
System.out.println(new String(bytes,0,len));
len = fileInputStream.read(bytes);
System.out.println(new String(bytes,0,len));
len = fileInputStream.read(bytes);
System.out.println(new String(bytes,0,len));
//关闭流
fileInputStream.close();
}
}
字符流
java.io.Writer
常用方法
变量和类型 | 方法 | 描述 |
---|---|---|
Writer | append(char c) | 将指定的字符追加到此writer。 |
abstract void | close() | 关闭流,先冲洗它。 |
abstract void | flush() | 刷新流。 |
void | write(char[] cbuf) | 写一个字符数组。 |
abstract void | write(char[] cbuf, int off, int len) | 写一个字符数组的一部分。 |
void | write(int c) | 写一个字符。 |
void | write(String str) | 写一个字符串。 |
java.io.FileWriter
构造器 | 描述 |
---|---|
FileWriter(File file) | 给 File 写一个 FileWriter ,使用平台的 default |
FileWriter(FileDescriptor fd) | 构造一个 FileWriter 给出的文件描述符,使用该平台的 default |
FileWriter(File file, boolean append) | 在给出要写入的 FileWriter 下构造 File ,并使用平台的 default charset构造一个布尔值,指示是否附加写入的数据。 |
FileWriter(File file, Charset charset) | 构造一个FileWriter 给予File 编写和charset 。 |
FileWriter(File file, Charset charset, boolean append) | 构造FileWriter 给出File 写入, charset和一个布尔值,指示是否附加写入的数据。 |
FileWriter(String fileName) | 构造一个 FileWriter 给出文件名,使用平台的 default charset |
FileWriter(String fileName, boolean append) | 使用平台的 default charset构造一个 FileWriter 给定一个文件名和一个布尔值,指示是否附加写入的数据。 |
FileWriter(String fileName, Charset charset) | 构造一个FileWriter 给出文件名和charset |
FileWriter(String fileName, Charset charset, boolean append) | 构造一个FileWriter 给定一个文件名, charset和一个布尔值,指示是否附加写入的数据。 |
package txet;
import java.io.FileWriter;
public class Demo {
public static void main(String[] args) throws IOException {
//Writer
FileWriter filewriter = new FileWriter("D://c.txt");
filewriter.write("龙猫");
filewriter.close();
//Writer
FileWriter filewriter = new FileWriter("D://c.txt");
filewriter.append("龙猫").append(",").append("剑圣").append(",").append("云曦");
filewriter.close();
}
}
java.io.Reader
常用方法
变量和类型 | 方法 | 描述 |
---|---|---|
abstract void | close() | 关闭流并释放与其关联的所有系统资源。 |
int | read() | 读一个字符。 |
int | read(char[] cbuf) | 将字符读入数组。 |
abstract int | read(char[] cbuf, int off, int len) | 将字符读入数组的一部分。 |
java.io.FileReader
构造方法
构造器 | 描述 |
---|---|
FileReader(File file) | 使用平台 FileReader ,在 File 读取时创建一个新的 FileReader |
FileReader(FileDescriptor fd) | 使用平台 default charset创建一个新的 FileReader ,给定 FileDescriptor 进行读取。 |
FileReader(File file, Charset charset) | 创建一个新的FileReader ,给出File 读取和charset |
FileReader(String fileName) | 使用平台 default charset创建一个新的 FileReader ,给定要读取的文件的 名称 |
FileReader(String fileName, Charset charset) | 给定要读取的文件的名称和FileReader ,创建一个新的FileReader |
package txet;
import java.io.FileReader;
public class Demo {
public static void main(String[] args) throws IOException {
//Reader
FileReader fileReader = new FileReader("D://a.txt");
while (true) {
int c = fileReader.read();
if (c == -1){
break;
}
System.out.println((char) c);
}
fileReader.close();
//Reader
FileReader fileReader = new FileReader("D://a.txt");
char[] chars = new char[100];
int len = fileReader.read(chars);
System.out.println(new String(chars,0,len));
fileReader.close();
}
}
字节流转换字符流(字节流 ’装饰‘ 为 字符流)
InputStreamReader
OutputStreamWriter
package txet;
import java.io.*;
public class Demo {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("D://a.txt");
//将字节输入流,转换为字符输入流
//参数1:要转换的字节流
//参数2:指定编码名称
InputStreamReader isr = new InputStreamReader(fis,"gbk");
while (true) {
int c = isr.read();
if (c == -1){
break;
}
System.out.println((char) c);
}
isr.close();
FileOutputStream fos = new FileOutputStream("D://c.txt");
//转换字符流
OutputStreamWriter osw = new OutputStreamWriter(fos);
osw.write("龙猫&云曦");
//刷新
osw.flush();
//关闭
osw.close();
}
}
打印流(PrintWriter)
package txet;
import java.io.*;
public class Demo {
public static void main(String[] args) throws IOException {
//打印流
PrintStream ps = new PrintStream("D://c.txt");
ps.println("龙猫&云曦");
ps.println("龙猫&云曦");
ps.println("龙猫&云曦");
ps.close();
PrintWriter pw = new PrintWriter("D://c.txt");
pw.println("龙猫&云曦");
pw.println("龙猫&云曦");
pw.println("龙猫&云曦");
pw.flush();
pw.close();
FileOutputStream fos = new FileOutputStream("D://c.txt");
PrintWriter pw2 = new PrintWriter(fos);
pw2.println("龙猫&云曦");
pw2.flush();
pw2.close();
}
}
缓存读取流(BufferedReader)
将字符输入流 转换为带有缓存 可以一次读取一行的缓存字符流读取流
package txet;
import java.io.*;
public class Demo {
public static void main(String[] args) throws IOException {
FileReader fw = new FileReader("D://c.txt");
BufferedReader br = new BufferedReader(fw);
String s = br.readLine();
System.out.println(s);
}
}