java:io的基本实例

一,io的常用类:

  1,File类

  2,OutputStream 字节输出流

  3,InputStream     字节输入流

  4,Writer  字符输出流

  5,Reader 字符输入流

package io;

import java.io.*;

/*
字节流
     在JAVA中所有的输入流的父类为: java.io.InputStream,此类是一个抽象类
         一、java.io.FileInputSteram
                 此类为文件输入流。
             read方法的作用
                 从流(数据来源)中一次返回一个数据字节。如果文件中没有数据字节则会返回-1
             available方法作用
                 返回当前流有多少个字节可以读。
             skip(long)
                 跳过指定的指节数。
        二、java.io.FileOutputStream
             在JAVA中所有的输出流的父类为: java.io.OutputStream,此类是一个抽象类

        三、BufferedInputStream BufferedOutputStream
            字节缓冲输入输出流,通过read(byte[]) 与write(byte[])实现,主要用于
            在读取数据字节的时候记录字节数。

         注: 以上的流都属于字节流,字节流特点是一次读取一个字节,可以用它来读取任何文件内容。

字符流
       由于字节流一次读取一个字节,因此在读取一些文本内容的时候,效率会比较低,
       因此JDK提供了字符流来读取字符类文件(一次读取二个字节)。

       注:字符流也是由字节流来实现,字符流只能读取字符类文件。
        一、java.io.Reader(抽象类)
                所有字符输入流的父类
        二、java.io.Writer(抽象类)
                所有字符输出流的父类。
        三、java.io.FileReader
               文件输入字符流
        四、java.io.FileWrite
               文件字符输出流
        如果出现字符编码不一至造成的乱码可以使用
           InputStreamReader与 OutputStreamWrite

 */
/**
 * io字节流和字符流的传递方式
 * @author dyb
 *
 */
public class IoDemoTree {
    public static void main(String[] args) {

    }
    /*java本身没有IO的读写功能,它是借助平台(window)自身的读写功能来实现,每调用
      一次read方法与write方法都需要与平台建立一次连接(耗费一定的时间),因此正确的
      操作应该是在建立一次连接后读取尽量多的字节数。
       read(byte[]) 与write(byte[]) 适合不记录读取字节数的情况下一次性读完所有文件内容。
      */
    /**
     * 一次性读完整个文件,使用下列方法。
     * @throws IOException
     */
    public void rw() throws IOException {
            FileInputStream in = new FileInputStream("src/start.mp3");
            FileOutputStream out = new FileOutputStream("src/start_2.mp3");
            long s=System.currentTimeMillis();//获取文件传输开始的的时间

            byte[] by=new byte[8194];
            int len = 0;
            while((len=in.read(by))!=-1){
                out.write(by,0,len);
            }
            in.close();out.close();

            long e=System.currentTimeMillis();
            System.out.println(e-s);

    }

    /**
     * 需要读取记录字节数使得下列方法。
     * @param aa
     * @throws IOException
     */
    public void rw(int aa) throws IOException {
            FileInputStream in = new FileInputStream("src/start.mp3");
            FileOutputStream out = new FileOutputStream("src/start_2.mp3");
            BufferedInputStream bin=new BufferedInputStream(in);
            BufferedOutputStream bout=new BufferedOutputStream(out);
            long s=System.currentTimeMillis();
            int a = 0;
            while((a=bin.read())!=-1){
                bout.write(a);
            }
            bin.close();bout.close();
            long e=System.currentTimeMillis();
            System.out.println(e-s);

    }

    /**
     * 需要读取字符类文件并且可以修改字符编码,使用下面方法
     * @param aa
     * @throws IOException
     */
    public void rw(byte  aa) throws IOException{
        InputStreamReader iObj=new InputStreamReader
                (new FileInputStream("src/action/说明.txt"),"GBK");
        OutputStreamWriter oObj=new OutputStreamWriter
                (new FileOutputStream("src/action/说明2.txt"),"UTF-8");
        char[] by=new char[8888];
        int len=iObj.read(by);
        while(len!=-1){
            oObj.write(by,0,len);
            len=iObj.read(by);
        }
        iObj.close();
        oObj.close();
    }
}

例二:

复制文件夹下所有的文件

package io;
import java.io.*;

/**
 * 使用File复制文件和目录
 * @author dyb
 *
 */
public class IoDemoTwo {

    public static void main(String[] args) throws IOException {
        
        /*st.copy("E:\\360SoftMgrGame","E:\\360downloads/aaa");*/
    
        IoDemoTwo obj=new IoDemoTwo();
        File src=new File("E:/360SoftMgrGame");
        File target=new File("E:/360downloads");
        if(!target.exists()) 
            target.mkdirs();
            obj.copy(src, target);
        
                
               
        }
    
    /*
     * 递归复制下一级目录
     */
    public void copy(File src,File target){
        File[] fs=src.listFiles();
        for(int i=0;i<fs.length;i++){
               String name=fs[i].getName();
               File newF=new File(target,name);
               if(fs[i].isDirectory()){
                    newF.mkdirs();
                   copy(fs[i],newF);
               }else{
                   rw(fs[i], newF);
               }
        }
}
    
    /**
     * 复制文件
     */
    public void rw(File src,File target){
    try {
      FileInputStream in = new FileInputStream(src);
      FileOutputStream out = new FileOutputStream(target);
      byte[] by = new byte[8194];
      int len = 0;
      while ((len = in.read(by)) != -1) {
          out.write(by, 0, len);
      }
      in.close();
      out.close();
    }catch (IOException e){
      e.printStackTrace();;
    }


        }
    
}

 

posted @ 2018-02-10 22:17  dybe  阅读(297)  评论(0编辑  收藏  举报