1. 程式人生 > >java:io的基本實例

java:io的基本實例

target close package fileread 取數 mem nload 方法 ace

一,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();;
    }


        }
    
}

java:io的基本實例