JAVA 之 IO

IO流的分类

根据数据流的流向可分为输入流和输出流

输入流 :把数据从磁盘 上读取到 内存 中的流。
输出流 :把数据从 内存 中写出到 磁盘上的流

格局数据的类型分为:字节流和字符流。

字节流 :以字节为单位,读写数据的流。
字符流 :以字符为单位,读写数据的流。

字节输入流  InputStream                   字节输出流  OutputStream

字符输入流   Reader                          字符输出流     Writer

流各类之间的关系图:

常用的字节流中的类:

java.io.FileOutputStream 类是文件输出流,用于将数据从内存中写出到文件(磁盘)。

 

public class FileOutputStreamConstructor throws IOException {
 public static void main(String[] args) { 
// 使用File对象创建流对象 
File file = new File("a.txt");
 FileOutputStream fos = new FileOutputStream(file); 
// 使用文件名称创建流对象 
FileOutputStream fos1 = new FileOutputStream("b.txt");
//定义一个字节数组,将字符串转换为字节数组
byte[] b = "abcde".getBytes();
//写入数据
fos.write(97); 
fos1.write(b);
//关闭资源
fos.close();
fos1.close(); 
                    }
          }

java.io.FileInputStream 类是文件输入流,从文件中读取字节到内存中。 它们都有两个类型的参数 File  和 String 

public class FISRead {
 public static void main(String[] args) throws IOException{
 // 使用文件名称创建流对象.
 FileInputStream fis = new FileInputStream("read.txt");
 // 文件中为abcde // 定义变量,作为有效个数 int len ;
 // 定义字节数组,作为装字节数据的容器 
byte[] b = new byte[2]; 
// 循环读取 
while (( len= fis.read(b))!=‐1) { 
// 每次读取后,把数组变成字符串打印 
System.out.println(new String(b));
      }
// 关闭资源 
fis.close();
    }
  }

常用的字符流中的类:

java.io.FileReader 类是读取字符文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区。

public class ReaderDemo {
    public static void main(String[] args) throws IOException {
        // 使用文件名称创建流对象
        FileReader fr = new FileReader("read.txt");
        // 定义变量,保存数据
         int b;
      //  循环读取
    while ((b = fr. read())!=-1) { 
        System.out.println((char)b);
    }
/*
//使用字符数组
 int len;
        char[] cbuf = new char[1024];
        while ((len = fr.read(cbuf))!=-1) {
            System.out.println(new String(cbuf));
        }
*/
    // 关闭资源 
         fr.close(); 
    }
}
   

java.io.FileWriter 类是写出字符到文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区。

public class ReaderDemo {
    public static void main(String[] args) {

        FileWriter fw=null;
        try {
          fw = new FileWriter("demo.text");
            fw.write('a');
            fw.write(97);
            fw.flush();
            fw.write("你好");

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (fw != null) {
                try {
                    fw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }


    }
}

因为内置缓冲区的原因,如果不关闭输出流,无法写出字符到文件中。但是关闭的流对象,是无法继续写出数据的。如果我们既想写出数据,又想继续使用流,就需要 flush 方法了。

flush :刷新缓冲区,流对象可以继续使用。

close :先刷新缓冲区,然后通知系统释放资源。流对象不可以再被使用了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值