闲着无事,想想对IO流还不是很熟悉,于是去翻了一下文档,汲取点养料。
IO流总的来说分两类:1、字节流 2、字符流
字节流使用的数组是字节数组bytep[] bts
字符流使用的数组是字符数组char[] chs
字节流:
抽象基类: InputStream、outputStream
字节流可以操作任何数据,read()方法读取字节返回int,当读取完成是返回-1,read(byte[] bt)方法吧读取的字节存储进字节数组返回int ,读取完成返回-1,available()获取关联文件的字节数
FileOuputStream fos=new FileOutPutStream("d:\\demo.txt")
fos.write("adfasfd"); //写入流
fos.close();//关闭流
缓冲区:是流的修饰类,应用了修饰模式,更加的灵活好用,增强流的功能
BufferedOutputStream 写入流缓冲区,增强效率,继承outputStream所有方法,构造函数传一个写入流;
BufferedInputStream 读取流缓冲区,增强效率,继承inputStream所有方法,构造函数用传一个读取流;
例:
BufferedOutputStream bo=new BufferedOutputStream(new FileOutputStream("d:\\tt.txt",true));字符流
抽象基类:Reader、Writer
操作纯文本的数据我们可以使用字符流,直接对字符进行操作
与字节流一样 字符流也有缓冲区,想提高效率就用缓冲区,以file开头的类都是操作文件的类,
BufferedWriter 特有方法 newLine() //跨平台的换行符 ,BufferedReader 特有方法readLine()一次读一行,当读到行标记时,把行标记之前的数据当作字符串返回,当读到末尾时返回null
BufferedReader bufrd=new BufferedReader(new FileReader("d:\\baa.txt"));
BufferedWriter bufw=new BufferedWriter(new FileWriter("d:\\demo.txt",true));
char[] buf=new char[1024];
String ch=null;
while((ch=bufrd.readLine())!=null){
bufw.write(bufrd.getNumber()+ch);
bufw.newLine();
bufw.flush();//对缓冲区的数据进行刷新,将数据刷到目的地
System.out.println(ch);
}
bufw.close();
bufrd.myClose();
readLine()方法原理:其实用的还是关联流对象的read()方法,只不过每次读到一个字符不对其进行操作,而是存储在临时容器中,当读到回车标记时,一吃性返回容器中存储的数据
转换流:
InputStreamReader:字节转字符
OutputStreamWriter:字符转字节
他们构造的时候要传入字节流对象、可以指定转换的编码
转换流的使用,缓冲区用来提高效率
String charset="utf-8";
BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream("d:\\demo.txt"),charset));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d:\\aaa.txt"),charset));
String ch=null;
if((ch=br.readLine())!=null){
bw.write(ch);
}
bw.close();
br.close();
File(String fileName) 将一个字符串路径封装成文件,可以存在可以不存在
separator:跨平台的分割目录符
File file =new File("d:"+File.separator+"abc"+File.separator+"a.txt")//d盘下面的abc文件夹下面的a.txt文件
常用的方法有:mkdir()//创建文件夹
mkdirs()//创建多级文件夹
delete()//删除,必须从里玩外的删除
exists()//判断文件是否存在
isFile()//判断File对象中封装的是否是文件
isirectory()//判断File对象中封装的是否是目录
注意listFiles()获取指定目录下的文件及文件夹对象时底层文件夹下如果没有文件 则返回Null,如果路径包含到最底层文件,返回也为null
打印流:
PrintStream:字节打印流
PrintWriter:字符打印流、对于字符串路径和File对象可以指定编码;对于OutputStream和Writer可以指定自动更新
//指定编码、自动刷新
PrintWrter pw =new PrintWriter(new OutputSteamWriter(new FileOutputStream("a.txt"),"utf-8"),true);
//提高效率、打印
PrintWrter pw =new PrintWriter(new BufferdWriter(new OutputSteamWriter(new FileOutputStream("a.txt"),"utf-8")),true);