java学习笔记十二


1.

Java IO

主要分为字节流(byte stream)

字符流          (characterstream)

实现这两种流的输入流与输出流分别是 InputStream OutputStream

、Reader Write。这四个类都是抽象类,所以只能被继承使用。

2.

与文件打交道肯定是要用到输入和输出流的,所以Java专门提供了读取文件数据的类FileInputStream,它继承了InputSteam属于字节流

要牢记其中的几个重要的方法:

读取文件的数据:

有三个read方法,其中最常用的是

int read(byte[] b,int off, int length)

其中 byte[] 用来存放文件中的数据信息,所以要有byte型数组;

int off 表示从那个字节开始读取数据;一般都从零开始;

int length 表示每次读取的长度,长度不能大于byte数组的长度;

另外,字节是不能被输出的,String类中提供了构造方法:

String (byte[] b, int off, int length ),就是将字节转换为字符;

看下面的程序:

当对一个流进行操作时,必须要有一下四部:

1.     打开流

2.     Boolean类型的语句 判断流中的信息还有没有

3.     对流进行读入或写出

4.     关闭流;

packagecom.jianjian.IO;

 

importjava.io.FileInputStream;

importjava.io.IOException;

 

public classFileTest9

{

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

      {

           FileInputStream file = new FileInputStream("F:/永建/个人数据/永建.txt");

           byte[] b = new byte[100];

           int length;

           while (-1 != (length =file.read(b,0,100)))

           {

                 String s = newString(b,0,length);

                 System.out.println(s);

           }

           file.close();

      }

}

这个程序是很典型的,以后会用到很多,所以一定要牢记!

 

2.

Java中将集合转换为数组的方法 :

toArray(new array [length]);

将数组转换为集合的方法

asList(array) 返回list 列表;

3.

记得以前说过String类型是final类型的是不可变的类型,Java中存在可变的字符串类型 StringBuffer类型

4.

字节流中的两个重要的分支: 节点流、过滤流(filterInputStream);

字节流总是与源头打交道;

 

5.

输出流,OutputStream:

可以创建文件,并向文件中追加内容(FileOutputStream);

与输出流反过来的是,用户输入的是字符串,要转换成字节;String类中同样提供了方法String.byte(String[] b);

看下面的程序:

创建一个txt文件并将“helloworld !”写入文件:输出流

将文字从内部传到外部;不要混淆!

package com.jianjian.IO;

 

import java.io.FileOutputStream;

import java.io.IOException;

 

public class OutputStream

{

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

   {

      FileOutputStream file = new FileOutputStream("c:/test.txt");//创建一个新文件

      String s = "helloworld!!";   

      byte[] b = s.getBytes();//将字符串转换成字节

      file.write(b);//将字节写入文件;

      file.close();//关闭流;

     

   }

}

 

6.

BufferOutputStream: 缓冲区输出流

 

计算机中的缓冲区  

缓冲器为暂时置放输出或输入资料的内存。

  缓冲器内资料自储存设备(如硬盘)来,放置在缓冲器中,须待机送至CPU或其他运算设备。

  缓冲区(buffer)这个中文译意源自当计算机的高速部件与低速部件通讯时,必须将高速部件的输出暂存到某处,以保证高速部件与低速部件相吻合. 后来这个意思被扩展了,成为"临时存贮区"的意思。

 

与缓冲打交道的其实就是计算机的内存了,BufferdeOutputStream的作用其实就是包装 一个输出流类型的对象,它的构造方法是

BufferedOutputStream(OutputSteams)

那么这个类的作用到底是什么呢?

比如说如果像上面那样,只让单纯的输出字节,程序每次只能将一个字节读入到文件中去,如果有一百个字节,就要读一百次。如果加上缓存包装,就可以先将字节存储在内存中,待需要时一次性传入到文件或硬盘中,极大的提高了效率!!

看下面的程序:

好处在与大量数据交互时会得到体现

package com.jianjian.IO;

 

import java.io.BufferedOutputStream;

import java.io.FileOutputStream;

 

public class FileTest10

{

   public static void main(String[] args)throws Exception

   {

      FileOutputStream file = new FileOutputStream("c:/jianjian.text");

      BufferedOutputStream bz = new BufferedOutputStream(file);

      bz.write("www.jianjian.com".getBytes());

      bz.close();

     

     

   }

}

 

7.

字节占八位

Int型占32位

8.

晕了:在输入流中的read方法返回的竟然是 字符!!!!

public int read();可是方法上明明写的是一个整型!!
是这样的,Java中的字符使用是用整型来表示的,只取后面的八位

package com.jianjian.IO;

 

public class FileTest11

{

   public static void main(String[] args)

   {

      char a ='a';

      int b = (int)a;

      System.out.println(b);

     

   }

}

打印出 97;

package com.jianjian.IO;

 

public class FileTest11

{

   public static void main(String[] args)

   {

      char a= 'a';

     

      System.out.println((int)a);

     

   }

}

打印出97

 

package com.jianjian.IO;

 

public class FileTest11

{

   public static void main(String[] args)

   {

      int a = 97;

     

      System.out.println((char)a);

     

   }

}

 

打印出a;

下面的程序将会非常有用:因为它会显示出各种字符所代表的整型值

package com.jianjian.IO;

 

public class FileTest11

{

   public static void main(String[] args)

   {

      int a= 65;

     

      System.out.println((char)a);

     

   }

}

 

大写的A 65;

小写的a 97;

 

 

9.

下面讲 字节数组输出流 ByteArrayIntputSteam 类似于FileIntputStream 它是从字节数组中读取数据的;

它的构造方法接收一个字节型数组,表示操作的对象:

/*

 * 将输入的字节数组中的字母,按大小写的形式,各输出一遍

 */

package com.jianjian.IO;

 

import java.io.ByteArrayInputStream;

import java.io.IOException;

 

public class FileeTest12

{

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

   {

      String s = "abcdefg";

      byte[] b = s.getBytes();

      ByteArrayInputStream array = new ByteArrayInputStream(b);

      for(int i = 0 ; i < 2; i++)

      {

        if(i == 0)

        {

           for(int j = 0 ;j < s.length(); j ++)

           {

              System.out.println((char)(array.read()));

           }

        }

        else

        {

           for(int k = 0 ; k < s.length(); k ++)

           {

              System.out.println(Character.toUpperCase((char)array.read()));//利用字符包装类来将字符变为大写

             

           }

        }

        /*

         * 我们也看到了read方法每执行一次都会指向下一个字节,要想实现我们的目标必须要将指针重新指向首字节!

         * 不指向的话就是返回 -1,转换成字节后就是?????,开发人员果然很聪明!

         * reset方法的作用就是使指针指向mark标记处,这里没有用到mark方法,表示从零开始!

         */

        array.reset();

      }

      System.out.println();

     

      array.close();

     

   }

}

 

10.

当然也有所谓的字节数组输出流,即从内部将数据写入到字节数组当中!

ByteArrayOutputStream;

并且字节数组输出流中有一个方法

writeTo(OutputStream s)即将字节数组输出流中的字节数组直接写入到其他的输入流中,比如说文件输出流!

package com.jianjian.IO;

 

import java.io.ByteArrayOutputStream;

import java.io.FileOutputStream;

import java.io.IOException;

 

public class FileTest13

{

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

   {

      String s = "hello worldwelcome";

      byte[] b = s.getBytes();

      ByteArrayOutputStream array = new ByteArrayOutputStream();

      array.write(b);//到这里就将字节存储到字节数组输出流当中,再将其拿出来即可

      byte[] bb = array.toByteArray();//该方法返回字节数组

      for(int i = 0 ;  i <bb.length; i ++)

      {

        System.out.println((char)bb[i]);

      }

      FileOutputStream file = new FileOutputStream("c:/really.txt");

      array.writeTo(file);//将字节写入到文件中;

      array.close();

      file.close();

     

     

   }

  

}

 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值