一、 File:文件和目录路径名的抽象方法
1、 构造方法
(1) File(String pathname):通过将给定的路径名字符串转换为抽象路径名来创建新的File实例
(2) File(String parent, String child):从父路径名字符串和子路径名字符串创建新的File实例
(3) File(File parent, String child):从父路径名和子路径名字符串创建新的File实例
2、 创建目录
(1) public boolean createNewFile():当具有该名称的文件不存在时,创建一个由该抽象路径名命名的新文件
(2) public boolean mkdir():创建由此抽象路径名命名的目录
(3) public boolean mkdirs():创建由此抽象路径名命名的目录,包括任何必须但不存在的父目录
3、 判断和获取
(1) public boolean isDirectory():测试此抽象路径名表示的File是否为目录
(2) public boolean isFile():测试此抽象路径名表示的File是否为文件
(3) public boolean exists():测试出抽象路径名表示的File是否存在
(4) public String getAbsolutePath():返回此抽象路径名的绝对路径名字符串
(5) public String getPath():将此抽象路径名转换为路径名字符串
(6) public String getName():返回此抽象路径名表示的文件或目录的名称
(7) public String[] list():返回此抽象路径名表示的目录中的文件和目录的名称字符串数组
(8) public File[] listFiles():返回此抽象路径名表示的目录中的文件和目录的File对象数组
4、 删除
(1) public Boolean delete():删除由此抽象路径名表示的文件或目录
二、 字节流(读不懂):
InputStream:这个抽象类是表示字节输入流的所有类的超类
OutputStream:这个抽象类是表示字节输出流的所有类的超类
1、 字节流写数据
(1) 创建字节输出流对象(File或String):
FileOutputStream fos = new FileOutputStream(“myByteStream\\fos.txt”);
(2) 将指定的字节写入此文件输出流
fos.write(97);
(3) 关闭此文件输出流并释放与此流相关联的任何系统资源
fos.close();
2、 字节流写数据的3种方式
(1) void write(int b):将指定的字节写入此文件输出流,一次写一个字节数据
(2) void write(byte[] b):将b.length字节从指定的字节数组写入此文件输出流,一次写一个字节数组数据
(3) void write(byte[] b, int off, int len):将len字节从指定的字节数组开始,从偏移量off开始写入此文件输出流,一次写一个字节数组的部分数据
3、 字节流写数据的两个小问题
(1) 字节流写数据如何实现换行:,写完数据后,加换行符window(\r\n),linux(\n),mac(\r)
(2) 字节流写数据如何实现追加写入:
public FileOutputStream(String name, boolean append);
4、 字节流读数据
(1) 创建字节输入流对象
FileInputStream fis = new FileInputStream(“myByteStream\\fos.txt”);
(2) 调用字节输入流对象的读数据方法
int by;
while((by = fis.read()) != - 1) {
System.out.print((char)by);
}
或
byte[] bys = new byte[1024];
int len;
while((len = fis.read(bys)) != -1){
System.out.print(new String(bys, 0, len));
}
(3) 释放资源
fis.close();
5、 字节缓冲输出流(BufferedOutputStream)
该类实现缓冲输出流,通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用
(1) 创建字节缓冲输出流对象
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(“myByteStream\\bos.txt”));
(2) 写数据
bos.write(“hello\r\n”.getBytes());
(3) 释放资源
bos.close();
6、 字节缓冲输入流(BufferedInputStream)
创建BufferedInputStream将创建一个内部缓冲区数组,当从流中读取或跳过字节时,内部缓冲区将根据需要从包含的输入流中重新填充,一次很多字节
(1) 创建字节缓冲输入流对象
BufferedIntputStream bis = new BufferedInputStream(new FileInputStream(“myByteStream\\bos.txt”));
(2) 读数据
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));
}
(3) 释放资源
bis.close();
三、 字符流:读的懂,只能用于文本数据
1、 字符串中的编码解码问题
(1) 编码:
byte[] getBytes():使用平台的默认字符集将该String编码为一系列字节,将结果存储到新的字节数组中
byte[] getBytes(String charsetName):使用指定的字符集将该String编码为一系列字节,将结果存储到新的字节数组中
(2) 解码
String(byte[] bytes):通过使用平台的默认字符集解码指定的字节数组来构造新的String
String(byte[] bytes, String charsetName):通过指定的字符集解码指定的字节数组来构造新的String
2、 字符流中的编码解码问题
(1) InputStreamReader:是从字节流到字符流的桥梁,它读取字节,并使用指定的编码将其解码为字符,使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集
InputStreamReader isr = new InputStreamReader(new FileInputStream(“myCharStream\\osw.txt”));
int ch;
while((ch = isr.read()) != -1) {
System.out.print((char)ch);
}
Isr.close();
(2) OutputStreamWriter:是从字符流到字节流的桥梁,使用指定的编码将写入的字符编码为字节,它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(“myCharStream\\osw.txt”));
osw.write(“中国”);
osw.close();
3、 字符流写数据的5种方式
(1) void write(int c):写一个字符
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(“myCharStream\\osw.txt”));
osw.write(97);
osw.flush();
osw.close();
(2) void write(char[] cbuf):写一个字符数组
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(“myCharStream\\osw.txt”));
char[] chs = {‘a’, ‘b’, ‘c’, ‘d’, ‘e’};
osw.write(chs);
osw.close();
(3) void write(char[] cbuf, int off, int len):写一个字符数组的一部分
(4) void write(String str):写一个字符串
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(“myCharStream\\osw.txt”));
osw.write(“abcde”);
osw.close();
(5) void write(String str, int off, int len):写一个字符串的一部分
4、 字符流读数据的2种方式
(1) int read():一次读一个字符数据
InputStreamReader isr = new InputStreamReader(new FileInputStream(myCharStream\\osw.txt));
int ch;
while((ch = isr.read()) != -1){
System.out.print((char)ch);
}
isr.close();
(2) int read(char[] cbuf):一次读一个字符数组数据
InputStreamReader isr = new InputStreamReader(new FileInputStream(myCharStream\\osw.txt));
char[] chs = new char[1024];
int len;
while((len = isr.read(chs)) != -1){
System.out.print(new String(chs, 0, len));
}
isr.close();
5、 简化版
(1) 根据数据源创建字符输入流对象
FileReader fr = new FileReader(“myCharStream\\demo.java”);
(2) 根据目的地创建字符输出流对象
FileWriter fw = new FileWriter(“myCharStream\\copy.java”);
(3) 读写数据,复制文件
int ch;
while((ch = fr.read()) != - 1) {
fw.write(ch);
}
或
char[] chs = new char[1024];
int len;
while((len = fr.read(chs)) != -1) {
fw.write(chs, 0, len);
}
(4) 释放资源
fw.close();
fr.close();
6、 字符缓冲流
(1) BufferedWriter:将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入,可以指定缓冲区大小,或者可以接受默认大小,默认值足够大,可用于大多数用途。
BufferedWriter bw = new BufferedWriter(new FileWriter(“myCharStream\\bw.txt”));
bw.write(“hello\r\n”);
bw.close();
(2) BufferedReader:从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取,可以指定缓冲区大小,或者可以使用默认大小,默认值足够大,可用于大多数用途
BufferedReader br = new BufferedReader(new FileReader(“myCharStream.bw.txt”));
Int ch;
While((ch = br.read()) != -1) {
System.out.print((char)ch);
}
或
char[] chs = new char[1024];
int len;
while((len = br.read(chs)) != -1) {
System.out.print(new String(chs, 0, len));
}
br.close();
7、 字符缓冲流特有功能
(1) BufferedWriter:
void newline():写一行行分隔符,行分隔符字符串由系统属性定义
(2) Bufferedreader:
public String readLine():读一行文字,结果包含行的内容的字符串,不包括任何终止字符,如果流的结尾已经到达,则为null
String line;
while((line = br.readLine()) != null) {
System.out.println(line);
}
四、 总结
1、 字节流
(1) 字节输入流(InputStream)
- FileInputStream
- BufferedInputStream
(2) 字节输出流(OutputStream)
- FileOutputStream
- BufferedOutputStream
2、 字符流
(1) 字符输入流(Reader)
-
InputStreamReader(FileReader)
-
BufferedReader
(2) 字符输出流(Writer)
- OutputStreamEriter(FileWriter)
- BufferedWriter