JavaSE-I/O流
3.1 File类
文件和目录路径名的抽象表示
方法名 | 说明 |
---|---|
File(String pathname) | 通过将给定的路径名字字符串转换成抽象路径名来创建新的File实例 |
File(String parent, String child) | 从父路径名字符串和子路径名字符串创建新的File实例 |
File(File parent, String child) | 从父抽象路径名和子路径名字符串创建新的File实例 |
File类创建功能
方法名 | 说明 |
---|---|
public boolean createNewFile() | 当具有该名称的文件不存在时,创建一个由该抽象路径名命名的新文件 |
public boolean mkdir() | 创建由此抽象路径命名的目录 |
public boolean mkdirs() | 创建由此抽象路径命名的目录,包括任何必需但不存在的父目录 |
File类判断和获取功能
方法名 | 说明 |
---|---|
public boolean isDirectory() | 测试此抽象路径名表示的File是否为目录 |
public boolean isFile() | 测试此抽象路径名表示的File是否为文件 |
public boolean exists() | 测试此抽象路径名表示的File是否存在 |
public String getAbsolutePath() | 返回此抽象路径名的绝对路径名字符串 |
public String getPath() | 将此抽象路径名转化为路径名字符串 |
public String getName() | 返回此抽象路径名表示的文件或目录的名称 |
public String[] list() | 返回此抽象路径名表示的目录中的文件和目录的名称字符串数组 |
public File[] listFiles() | 返回此抽象路径名表示的目录中的文件和目录的File对象数组 |
File类删除功能(如果一个目录中有内容(目录,文件),不能直接删除,应该先把目录中的内容删除,再删除目录)
方法名 | 说明 |
---|---|
public boolean delete() | 删除由此路径名表示的文件和目录 |
3.2 I/O流概述和分类
3.2.1 IO流分类
- 按数据的流向:
- 输入流:读数据
- 输出流:写数据
- 按照数据类型:
- 字节流
- 字节输入流
- 字节输出流
- 字符流
- 字符输入流
- 字符输出流
- 字节流
3.2.2 字节流抽象基类
- InputStream:这个抽象类是表示字节输入流的所有类的超类
- OutputStream:这个抽象类是表示字节输出流的所有类的超类
- 子类名特点:子类名称都是以其父类名作为子类名的后缀
3.2.3 字节流写数据
FileOutputStream:文件输出流用于将数据写入File
- FileOutputStream(String name):创建文件输出流以指定的名称写入文件
FileOutputStream fileOutputStream = new FileOutputStream("文件路径");
fileOutputStream.write(97);
字节流写数据的3种方式
方法名 | 说明 |
---|---|
void write(int b) | 将指定的字节写入此文件输出流一次写一个字节数据 |
void write(bytell b) | 将 b.length字节从指定的字节数组写入此文件输出流一次写一个字节数组数据 |
void write(bytell b, int off, int len) | 将len字节从指定的字节数组开始,从偏移量off开始写入此文件输出流一次写一个字节数组的部分数据 |
字节流写数据的两个小问题
字节流写数据如何实现换行呢?
写完数据后,加换行符0
windows:\rn
linux:\n
mac:\r
字节流写数据如何实现追加写入呢?
public FileOutputStream(Stringname.boolean append)
创建文件输出流以指定的名称写入文件。如果第二个参数为true,则字节将写入文件的末尾而不是开头
3.2.4 字节流读数据
FilelnputStream:从文件系统中的文件获取输入字节
- FilelnputStream(String name): 通过打开与实际文件的连接来创建一个FilelnputStream,该文件由文件系统中的路径名name命名
// 一次读一个字节数据
FileInputStream fis = new FileInputStream("文件路径");
int by;
while ((by = fis.read()) != -1){
System.out.print((char)by);
}
fis.close();
//一次读一个字节数组数据
FileInputStream fis = new FileInputStream("文件路径");
byte[] bys = new byte[1024];
int len;
while ((len=fis.read(bys)) != -1){
System.out.println(new String(bys,0,len));
}
fis.close();
3.2.5 字节缓冲流
字节缓冲流: BufferOutputStream: 该类实现缓冲输出流。通过设置这样的输出流,应用程序可以向 底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用 BuferedinputStream:建ufferedinputStream将创建一个内部缓中区数组,当从流中读 取或跳过字节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次很多字节 构造方法: 字节缓冲输出流: BufferedOutputStream(OutputStream out) 字节缓冲输入流: BufferedInputStream(InputStreamin)
// 字节缓冲输出流
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("文件路径"));
bos.write("hello\r\n".getBytes());
bos.write("world\r\n".getBytes());
bos.close();
// 字节缓冲输入流
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("文件路径"));
// 一次一个字节
int by;
while ((by = bis.read()) != -1){
System.out.print((char)by);
}
// 一次一个字节数组
byte[] bys = new byte[1024];
int len;
while ((len=bis.read(bys)) != -1){
System.out.print(new String(bys,0,len));
}
bis.close();
3.2.6 字符流抽象基类
- Reader:字符输入流的抽象类
- Writer:字符输出流的抽象类
字符流中和编码解码问题相关的两个类:
- lnputStreamReader:从字节流到字符流的桥梁
- OutputStreamWriter:从字节流到字符流的桥梁
// 字符输出流
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("文件路径"));
osw.write("中国");
osw.close();
// 字符输入流
InputStreamReader isr = new InputStreamReader(new FileInputStream("文件路径"));
// 一次读一个字符
int ch ;
while ((ch= isr.read()) != -1){
System.out.print((char) ch);
}
// 一次读一个字符数组
char[] chs = new char[1024];
int len;
while((len = isr.read(chs)) != -1){
System.out.print(new String(chs,0,len));
}
isr.close();
3.2.7 字符流写数据
方法名 | 说明 |
---|---|
void write(int c) | 写一个字符 |
void write(char[] cbuf) | 写入一个字符数组 |
void write(char[] cbuf,int off, int len) | 写入字符数组的一部分 |
void write(String str) | 写一个字符串 |
void write(String str, int off,int len) | 写一个字符串的一部分 |
注意方法
方法名 | 说明 |
---|---|
flush() | 刷新流,还能继续写 |
close() | 关闭流,释放资源,关之前先刷新,一旦关闭就不能继续写了 |
3.2.8 字符流读数据
方法名 | |
---|---|
int read() | 一次读一个字符数据 |
int read(char[] cubf) | 一次读一个字符数组数据 |
**FileReader:**用于读取字符文件的便捷类 FileReader(String fileName)
**FileWriter:**用于写入字符文件的便捷类 FileWriter(String fileName)
FileReader fr = new FileReader("文件路径");
FileWriter fw = new FileWriter("文件路径");
3.2.9 字符缓冲流
字符缓冲流:
- BufferedWriter: 将文本写入字符输出流,缓中字符,以提供单个字符,数组和字符串的高效写入,可以指定缓冲区大小,或者可以接受默认大小。默认值足够大,可用于大多数用途
- BufferedReader:从字符输入流读取文本,缓中字符,以提供字符,数组和行的高效读取,可以指定缓冲区大小,或者可以使用默认大小。默认值足够大,可用于大多数用途
构造方法:
- BufferedWriter(Writer out)
- BufferedReader(Readerin)
字符缓冲流特有功能:
BufferedWriter:
- void newLine0:写一行行分隔符,行分隔符字符串由系统属性定义
BufferedReader:
- publicStringreadLine0: 读一行文字。结果包含行的内容的字符串,不包括任何行终止字符,如果流的结尾已经到达,则为null
BufferedReader br = new BufferedReader(new FileReader("地址"));
BufferedWriter bw = new BufferedWriter(new FileWriter("地址"));
String line;
while ((line = br.readLine()) != null){
bw.write(line);
bw.newLine();
bw.flush();
}
br.close();
bw.close();