你的位置:首页 > 软件开发 > Java > Java基础系列——IO流

Java基础系列——IO流

发布时间:2015-04-13 12:00:19
---恢复内容开始--- Java对数据的操作都是通过流的方式,数据的输入和输出是相对内存来说的,将外设的数据读到内存:输入流;将内存的数据写到外设:输出流。流按操作数据分为两种:字节流,字符流。输入输出的数据全都是以字节为单位的二进制,字符流后期才出现,字符流出现的目 ...

---恢复内容开始---

 

 Java对数据的操作都是通过流的方式,数据的输入和输出是相对内存来说的,将外设的数据读到内存:输入流;将内存的数据写到外设:输出流。

流按操作数据分为两种:字节流,字符流。

输入输出的数据全都是以字节为单位的二进制,字符流后期才出现,字符流出现的目的是让机器识别日常生活文字,编码表(美国ascii,中国GBK)记录了文字和数字的对应关系,从而字节流+编码表=字节流,从硬盘读取字节流之后,先查表,转换成对应的文字,从而形成字符流。(注:国际统一的为unicode(java内置),无论什么字符都用2个字节表示)

字节流的抽象基类(顶层父类):inputStream,outputStream.(数据载体)

字符流的抽象基类 :Reader,Writer.

这些子类的后缀都是父类名,前缀是子类实现的功能。

 

 

 java.lang.Object                                                                                                java.lang.Object                                                                                                                                                      

     |--java.io.writer   (写入字符流的抽象类)                                                                  |--java.io.writer

        |--java.io.OutputStreamWriter(字符流通向字节流的桥梁,转换流)                                  |--BufferedWriter

            |--java.io.FileWriter

1.FileWriter:将字符写入到文本文件(和文本编辑器,word等工具一个原理)

public static void main(String[] args) throws IOException{

         FileWriter fw = new FileWriter("demo.txt",true);       // 如果demo存在,则会覆盖,如果不存在,创建。如果加入      true,那么不会覆盖,会续写。

         fw.write("abc");                                                     //abc写入到了临时存储缓冲区中。

         fw.flush();                                                            //将数据直接写入到demo。

         fw.close();                                                            //关闭流,释放资源。close中调用了flush,flush可省略。

}

IO异常的处理:

public static void main(String[] args){

         FileWriter fw = null;                                             //流对象的创建方式,因为一般都会发生异常。

try{

          fw = new FileWriter("demo.txt",true);  

          fw.write("abc");

      }

      catch (IOException e){

           System.out.println(e.toString());

      }

      finally{

               if(fw != null)                                   //如果要创建的路径不存在,比如F盘没有,那么fw这个流就不能创建,如果这里不判断,就会抛出异常。

            try{

              fw.close();

                }   catch (IOException e) {throw new RuntimeException("关闭失败");}  

             }

}

2.FileReader:读取文本文件中的字符

    FileReader fr = new FileReader("demo.txt");

int a = 0;

while((a=fr.read())!=-1)

{

   sop(char(a));                                                          //每次读取一个字符,但是以二进制的数字格式输出(0-65535  0x00-0xffff)。如果读取完了,会返回-1

}

 /*

     也可以以数组的形式来读

     char[] buf = new char[3];

     int num = fr.read(buf);                                           //num是读取的字符个数

     sop(num+":"+new String(buf,0,num));                    //这里string里用num可以保证读几个打印几个。 

     如果存的是abcde五个字符,那么第一次逐个读取abc到内存里的长度为3的数组,然后输出num=3和abc,下次读取时de放到了内存数组的前两位,覆盖了ab所在位置, 第三位读不到但是内存中还是c,所以第二次读取num=2和dec,第三次返回num=0和dec。

     while((num=fr.read(buf))!=-1){

     sop(new String(buf,0,num));                                  //buf越大,效率越高

}

 */

例子:复制文本文件 先读再写 

public static void main(String[] args) {

原标题:Java基础系列——IO流

关键词:JAVA

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。