Java I/O流
一、I/O流整体结构
二、常见I/O类和方法
File类
构造方法
- File(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 File实例。
- File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
- File(String parent, String child) 从父路径名字符串和子路径名字符串创建新的 File实例。
File f1 = new File("路径名");
常用方法
- boolean createNewFile() 创建文件
- boolean mkdir() 创建目录
- boolean mkdirs() 创建多级目录
- boolean exists()
- boolean delete()
- String getName() 返回由此抽象路径名表示的文件或目录的名称。
- String getPath() 将此抽象路径名转换为路径名字符串。
- String[] list() 返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。
- File[] listFiles() 返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件。
字节流
抽象基类:InputStream、OutputStream
子类实现:FileInputStream、FileOutputStream等。
FileOutputStream类写文件
FileOutputStream类用于将文件写入File。
常用方法
- void write(int b) 将指定的字节写入此文件输出流。
- void write(byte[] b) 将 b.length字节从指定的字节数组写入此文件输出流。
- void write(byte[] b, int off, int len) 将 len字节从指定的字节数组开始,从偏移量 off开始写入此文件输出流。
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputStreamDemo {
public static void main(String[] args) throws IOException {
//1、创建字节输出流对象
FileOutputStream fos = new FileOutputStream("基础语\\fos.txt");
//2、将指定的字节写入文件
fos.write(97);
//3、关闭资源
fos.close();
}
}
输出结果:
FileInputStream类读文件
常用方法
- int read() 从该输入流读取一个字节的数据。
- int read(byte[] b) 从该输入流读取最多 b.length个字节的数据到一个字节数组。
- int read(byte[] b, int off, int len) 从该输入流读取最多 len个字节的数据到字节数组。
import java.io.FileInputStream;
import java.io.IOException;
public class FileInputStreamDemo {
public static void main(String[] args) throws IOException {
//1、创建字节输出流对象
FileInputStream fis = new FileInputStream("基础语法\\fos.txt");
//2、将指定的字节文件读取
// int by = fis.read();
// System.out.println(by);
// System.out.println((char)by);
int by;
while((by = fis.read()) != -1){
System.out.println((char)by);
}
//3、关闭资源
fis.close();
}
}
输出结果:
//一次读取一个字节
byte[] bys = new byte[1024];
int len;
while ((len = fis.read(bys)) != -1){
System.out.print(new String(bys, 0,len));
}
输出结果:
字节缓冲流
字节缓冲流仅仅提供缓冲区,真正的读写数据还是要依靠基本的字节流对象进行操作,可一次读/写多个字节数据。
BufferedInputStream类
- 构造方法:BufferedInputStream(InputStream in)
BufferedOutputStream类
- 构造方法:BufferedOutputStream(OutputStream out)
字符流
字符流 = 字节流 + 编码表
抽象基类:Reader 、Writer
子类实现:InputStreamReader、OutputStreamWriter
常用方法
- byte[] getBytes()
- byte[] getBytes(String charsetName) 使用命名的字符集将该 String编码为一系列字节,将结果存储到新的字节数组中。
- String(byte[] bytes) 通过使用平台的默认字符集解码指定的字节数组来构造新的 String
- String(byte[] bytes, String charsetName) 构造一个新的String由指定用指定的字节的数组解码charset 。
OutputStreamWriter类
构造方法
- OutputStreamWriter(OutputStream out) 创建一个使用默认字符编码的OutputStreamWriter。
- OutputStreamWriter(OutputStream out, String charsetName) 创建一个使用命名字符集的OutputStreamWriter。
常用方法
- void write(char[] cbuf,) 写入字符数组。
- void write(int c) 写一个字符
- void write(String str, int off, int len) 写一个字符串。
InputStreamReader类
构造方法
- InputStreamReader(InputStream in) 创建一个使用默认字符集的InputStreamReader。
- InputStreamReader(InputStream in, String charsetName) 创建一个使用命名字符集的InputStreamReader。
常用方法
- int read() 读一个字符
- int read(char[] cbuf) 将字符读入数组。
public class OutputStreamWriterDemo {
public static void main(String[] args) throws IOException {
//创建字符流
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("基础语法\\osw.txt"),"GBK");
//写数据
osw.write("中国");
osw.close();
//读数据
InputStreamReader isr = new InputStreamReader(new FileInputStream("基础语法\\osw.txt"),"GBK");
char[] bys = new char[1024];
int len;
while ((len = isr.read(bys)) != -1){
System.out.print(new String(bys,0,len));
}
//关闭资源
isr.close();
}
}
输出结果:
字符缓冲流
字节缓冲流仅仅提供缓冲区,真正的读写数据还是要依靠基本的字节流对象进行操作,可一次读/写多个字节数据。
BufferedReader类
- 构造方法:BufferedReader(Reader in)
- 特有功能:String readLine() 读一行文字
BufferedWriter类
- 构造方法:BufferedWriter(Writer out)
- 特有功能:void newLine() 写一行分隔符
JavaSE入门: JavaSE基础语法01
JavaSE入门: JavaSE基础语法之面向对象和异常02
JavaSE入门: JavaSE基础语法之常见类03
JavaSE入门: JavaSE基础语法之集合框架04