转换流
InputStreamReader
public class InputStreamReaderDemo {
public static void main(String[] args) throws IOException {
//演示字节转字符流的转换流
readCN();
}
public static void readCN() throws IOException{
//创建读取文件的字节流对象
InputStream in = new FileInputStream("c:\\cn8.txt");
//创建转换流对象
InputStreamReader isr = new InputStreamReader(in,"utf-8");
//使用转换流去读字节流中的字节
int ch = 0;
while((ch = isr.read())!=-1){
System.out.println((char)ch);
}
//关闭流
isr.close();
}
}
是字节流通向字符流的桥梁,它使用指定的charset读取字节将其解码成为字符
OutputStreamWriter
public static void writeCN() throws Exception {
//创建与文件关联的字节输出流对象
FileOutputStream fos = new FileOutputStream("c:\\cn8.txt");
//创建可以把字符转成字节的转换流对象,并指定编码
OutputStreamWriter osw = new OutputStreamWriter(fos,"utf-8");
//调用转换流,把文字写出去,其实是写到转换流的缓冲区中
osw.write("你好");//写入缓冲区。
osw.close();
}
是字符流通向字节流的桥梁,它使用指定的charset将要写入流中的字符编写成字节
键盘录入
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in);
BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(System.out);
流的操作规律
之所以要弄清楚这个规律是因为流对象太多,开发时不知道哪个对象合适
想要知道开发时用哪些对象,只要知道4个明确即可
1.明确源和目的
源:InputStream Reader
目的:OutputStream Writer
2.明确数据是否是存文本数据
源:是存文本:Reader
否:InputStream
目的:是存文本Writer
否:OutputWriter
到这里就可以明确需求中具体要使用哪个体系
3.明确具体设备
源设备:
硬盘:File
键盘:System.in
内存:数组
网络:Socket流
目的设备:
硬盘:File
键盘:System.out
内存:数组
网络:Socket流
4.是否需要其他额外功能
是否需要高效(缓冲区)。是就加上Buffer
什么时候使用转换流呢?
1.源或者目的对应的设备是字节流,但是操作的却是文本流,可以使用转换流作为桥梁
2.一旦操作文本涉及到具体的指定编码时,必须使用转换流
File类
1、将文件或者文件夹封装成对象
2、方便对文件与文件夹的属性信息进行操作
3、File对象可以作为参数传递给流的构造函数
File对象的常见方法
1、获取
- 获取文件名称
- 获取文件路径
- 获取文件大小
- 获取文件修改路径
2、创建与删除
3、判断
4、重命名
renameTo
5、file.list
获取当前目录下的文件以及文件夹的名称,包含隐藏文件,调用list方法的File对象中封装的必须是目录,否则会发生NullpointerException
如果访问的系统级目录也会发生指针异常
如果目录存在但是没有内容,会返回一个数组,但是长度为0
过滤器 dir.list(new SuffixFilter(".txt"));