Javase基础之IO流笔记

时间:2021-05-20 21:32:39

IO流可以分为字符流和字节流:字符流用来操作与字符相关的读写,字符流的默认编码为GBK,字符流底层其实就是用字节流实现的。(如文档)

字节流用来操作与字节相关的读写。(如图片,视频)

注意:一个字符占用两个字节。

IO流有4个抽象基类:字符流(Reader,Writer)

     字节流(InputStream,OutputStream)


字符流的子类:FileReader,FileWriter,BufferedReader,BufferedWriter,InputStreamReader,OutputStreamWriter

FileWriter

方法:writer(String str);

writer(char[]  ch);

flush();//刷新缓冲区,数据没有刷新就不会写到硬盘上。

close();关闭前会先刷新缓冲区。

FileReader

方法:int read()//每次读取一个字符,当读取到末尾没有数据时返回-1.

   int read(char[] buf);//将读取的内容存放到buf字符数组里面,int为读取内容的长度,长度取决于字符数组的大小。JVM虚拟机启动的时候分配的内存默认是64M,所以buf的大小应该控制的差不多。

    close()

代码示例:

/**
* 需求:将demo.txt里面的内容拷贝到demo_copy.txt文件中。
*/
import java.io.*;
public class CopyDemo {
public static void main(String[] args) {
copy1();
}
public static void copy1(){
FileReader fr=null;
FileWriter fw=null;
try{
fr=new FileReader("demo.txt");
fw=new FileWriter("demo_copy.txt");
int num=0;
char[] buf=new char[1024];
while((num=fr.read(buf))!=-1){
fw.write(buf,0,num);
}
}catch(IOException e){
e.printStackTrace();
}finally{
if(fw!=null)
try{
fw.close();
}catch(IOException e){
e.printStackTrace();
}finally{
if(fr!=null){
try{
fr.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
}
}
}

BufferedWriter:为数据的读写提供缓冲区,

方法:write()

    newLine();//换行操作,提供了一个换行的跨平台操作,Linux对应的换行是\n,而Window对应的换行是\r\n.

   close();此时的关闭操作是关闭Writer的字符流,因此不必在关闭Writer的字符流。

BufferedReader

方法:read()

    String reaLine();//一次性读取一行,原理还是一次都是一个字符.当读到末尾没有数据时返回null;

    close();

转换流:InputStreamReader,OutputStreamWriter

特点:转换流可以指定编码类型。new OutputStreamWriter(System.out,"utf-8");

代码示例:


<pre name="code" class="java">/**
需求:将控制台输入的字符存到trans.txt文件中,当控制台输入over时结束输入。
*/
import java.io.*;
public class transStream {
public static void main(String[] args) {
BufferedReader bufr=null;
BufferedWriter bufw=null;
try {
bufr=new BufferedReader(new InputStreamReader(System.in));
bufw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("trans.txt"),"utf-8"));//指定编码表
String line=null;
while((line=bufr.readLine())!=null){
bufw.write(line.toUpperCase());
bufw.flush();
bufw.newLine();

if("over".equals(line))
{
break;
}

}


} catch (IOException e) {
e.printStackTrace();
}
finally{
try {
bufr.close();
bufw.close();

} catch (Exception e2) {
e.printStackTrace();
}}}}