按照“流”的数据流向,可以将其化分为:输入流和输出流。按照“流”中处理数据的单位,可以将其区分为:字节流和字符流。在java中,字节是占1个Byte,即8位;而字符是占2个Byte,即16位。字节流的抽象基类:
InputStream,OutputStream
字符流的抽象基类:
Reader,Writer
1.什么是IO
Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列。Java的I/O流提供了读写数据的标准方法。任何Java中表示数据源的对象都会提供以数据流的方式读写它的数据的方法。
IO又分为流IO(java.io)和块IO(java.nio)
Java.io是大多数面向数据流的输入/输出类的主要软件包。此外,Java也对块传输提供支持,在核心库 java.nio中采用的便是块IO。
流IO的好处是简单易用,缺点是效率较低。块IO效率很高,但编程比较复杂。
这里先讲流IO。
2.流的基本概念
在电脑上的数据有三种存储方式,一种是外存,一种是内存,一种是缓存。比如电脑上的硬盘,磁盘,U盘等都是外存,在电脑上有内存条,缓存是在CPU里面的。外存的存储量最大,其次是内存,最后是缓存,但是外存的数据的读取最慢,其次是内存,缓存最快。这里总结从外存读取数据到内存以及将数据从内存写到外存中。对于内存和外存的理解,我们可以简单的理解为容器,即外存是一个容器,内存又是另外一个容器。那又怎样把放在外存这个容器内的数据读取到内存这个容器以及怎么把内存这个容器里的数据存到外存中呢?
在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:
标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流等等,java中将输入输出抽象称为流,就好像水管,将两个容器连接起来。将数据从外存中读取到内存中的称为输入流,将数据从内存写入外存中的称为输出流。
FileIntputStream和FileOutputStream类
File file=new File("C:\\Users\\Administrator\\Desktop\\text.txt"); FileOutputStream fileOutputStream=new FileOutputStream(file); byte[] bytes = "hello world".getBytes(); fileOutputStream.write(bytes); fileOutputStream.close(); FileInputStream fileInputStream=new FileInputStream(file); byte[] bytes1=new byte[1024]; int read = fileInputStream.read(bytes1); System.out.println("文件中的信息是"+new String(bytes1,0,read)); fileInputStream.close();
FileReader和FileWriter类
File file=new File("C:\\Users\\Administrator\\Desktop\\text.txt"); FileWriter fileWriter=new FileWriter(file); String word="hello"; fileWriter.write(word); fileWriter.close(); FileReader fileReader=new FileReader(file); char[] message=new char[1024]; int read = fileReader.read(message); System.out.println("读入的信息是"+new String(message,0,read)); fileReader.close();
BufferedReader和BufferedWriter类
关闭流的时候要先关闭缓冲流,这里readLine读入一行数据,newLine写入一个行分隔符
File file=new File("C:\\Users\\Administrator\\Desktop\\text.txt"); String[] message=new String[]{"hello","word","helloword"}; FileWriter fileWriter=new FileWriter(file); BufferedWriter bufferedWriter=new BufferedWriter(fileWriter); for(int i=0;i<message.length;i++){ bufferedWriter.write(message[i]); bufferedWriter.newLine(); } bufferedWriter.close(); fileWriter.close(); FileReader fileReader=new FileReader(file); BufferedReader bufferedReader=new BufferedReader(fileReader); String tmp=null; int i=1; while ((tmp=bufferedReader.readLine())!=null){ System.out.println("第" +i+"行 "+tmp); i++; } bufferedReader.close(); fileReader.close(); }