您的位置:首页 > 职场人生

黑马程序员----JAVA----IO小结(2)

2013-02-25 00:57 387 查看
 ----------------------------------android培训java培训、期待与您交流!------------------------------

 

 

字节流:

        抽象基类:

              InputStream

             OutputStream。

 字节流可以操作任何数据。

 

 注意:

         字符流使用的数组是字符数组。char[]chs

         字节流使用的数组是字节数组。byte[] bys

          FileOutputStream fos=newFileOutputStream(new FileOutputStream("a.txt");

          fos.write("ace");//直接将数据写入到了目的地。

          fos.close();//关闭资源。

               FileInputStream fis=new FileInputStream("a.txt")

          fis.available();//获取关联的文件的字节数。

          //如果文件的体积不是很大。

          //可以这样操作。

          byte[] buf=new byte[fis.available()];//创建一个刚刚好的缓冲区。

          //但是这有一个弊端,就是文件过大,大小超出jvm的内容空间时,会内存溢出。
          fis.read(buf);

               System.out.println(new String(buf));

复制一个图片:

            BufferedInputStream bis=new BufferedInputStream(new FileInputStream("1.jpg");

            BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("2.jpg");   

            int by=0;

            while((by=bis.read())!=-1)

            {

                   bos.write(by);

            }

            bos.close();

            bis.close();

 
转换流:

       特点:

             1,是字节流和字符流之间的桥梁。

             2,该流对象中可以对读取到的字节数据进行指定编码表的编码转换。

 什么时候使用呢?

             1,当字节和字符之间有转换动作时。

             2,流操作的数据需要进行编码表的指定时。

 具体的对象体现:

             1,InputStreamReader:字节到字符的桥梁。

             2,OutputStreamWriter:字符到字节的桥梁。

这两个流对象是字符流体系中的成员。

 那么他们的转换作用,而本身又是字符流。所以在构造的时候,需要传入字节流对象进来。

 

 构造函数:

          InputStreamReader(InputStream):通过该构造函数初始化,使用的是本系统默认 的编码表GBK。

          InputStreamReader(InputStream, String charSet):通过该构造函数初始化,可以指定编码表。

          OutputStreamWriter(OutputStream, String charSet):通过该构造函数初始化,可以指定编码表。

 操作文件的字符流对象是转换流的子类。

          Reader

                  |--InputStreamReader

                            |--FileReader

          Writer

                  |--OutputStreamWriter

                            |--FileWriter
 注意:

          在使用FileReader操作文本数据时,该对象使用的是默认的编码表。

          如果要使用指定的编码表时,必须使用转换流。

          //操作a.txt中的数据使用的是本系统默认的GBK。

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

            InputStreamReader isr =newInputStreamReader(new FileInputStream("a.txt");

            这两句的代码意义相同。

 

如果a.txt中的文件的字符数据是通过UTF-8的形式编码。

         那么在读取时,就必须指定编码表。

         那么转换流必须使用。

           InputStreamReader isr=new InputStreamReader(new FileInputStream("a.txt")."utf-8");

 

 流操作的基本规律。

             1,明确数据源和数据目的。

             2,明确操作的数据是否是纯文本数据。

            数据源:键盘 System.in,硬盘 File开头的流对象,内存(数组).

            数据目的:控制台 System.out, 硬盘File开头的流对象,内存(数组);

将键盘录入的数据存储到一个文件中。

                class Dmeo

                {

                        public static void main(String[] args)

                        {

                                BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

                                BufferedWriter bw = new BufferedWriter(new FileWriter("a.txt"));

  

                                 //基本读写

                                 String line = null;

                                 while((line=br.readLine())!=null){

                                  if("over".equals(line)){

                                             break;

                                     }

                                  bw.write(line);

                                  bw.newLine();

                                  bw.flush();

                         }

   

                         bw.close();

                         br.close();

             }

 }

将一个文本文件展示在控制台:

                class Demo

                {

                        public static void main(String[] args)

                         {

                                BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

 

                                 //基本读写

                                   String line = null;

                                   while((line=br.readLine())!=null){

                                    bw.write(line);

                                    bw.newLine();

                                    bw.flush();

                                 }

  

                                 bw.close();

                                 br.close();

                          }

 }

 

 编写一个程序,将d:\java目录下的所有.java文件复制到d:\jad目录下,

 并将原来文件的扩展名从.java改为.jad。

public class CopyFolder {

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

                    //封装源目录

                    File file = new File("d:\\java");

                    //封装目的地目录

                    File src = new File("d:\\jad");

  

                    //得到一个满足条件的文件数组对象

                    File[] fileArray = file.listFiles(new FilenameFilter() {

                   @Override

                    public boolean accept(File dir, String name) {

                               return new File(dir,name).isFile() && name.endsWith(".java");

                    }

  });

  

                      //遍历文件对象数组,获取到每一个文件对象。

                      for(File f : fileArray){

                      //获取旧名称

                      String oldName = f.getName();  //CopyTest2.java

                      //起新名字

                      String newName = oldName.replace(".java", ".jad");  //CopyTest2.jad

                      //重新把新名字的文件封装成目的地目录下的文件

                      File srcFile = new File(src,newName); //d:\\jad\\CopyTest2.jad

   

                      //要求把下面的代码封装成一个方法。

                       BufferedReader br = new BufferedReader(new FileReader(f));

                       BufferedWriter bw = new BufferedWriter(new FileWriter(srcFile));

                       String line = null;

                       while((line=br.readLine())!=null){

                                 bw.write(line);

                                 bw.newLine();

                                 bw.flush();

                        }

                        bw.close();

                        br.close();

                  }

         }

}

 

 

   

----------------------------------android培训java培训、期待与您交流!------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: