亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

Java的I/O介紹

2019-11-06 06:44:20
字體:
來源:轉載
供稿:網友

學習java的同學注意了?。?! 學習過程中遇到什么問題或者想獲取學習資源的話,歡迎加入Java學習交流群,群號碼:523047986  我們一起學Java!

<<瘋狂JAVA編程>>第15章有詳細介紹,講的還是相當不錯的,我們可以好好看下

IO流分為輸入流(InputStream)和輸出流(OutputStream)兩類按流所處理的數據類型又可以分為字節流和字符流(用于處理Unicode字符數據)兩類

字節流主要是由 InputStream和OutputStream作為基類,而字符流主要是由 Reader和Writer作為基類的

節點流(低級流) 和 處理流(高級流):JAVA使用處理流來包裝節點流式一種典型的裝飾器設計模式,通過使用處理流來包裝不同的節點流,既可以消除不同節點流的實現差異,也可以提供更方便的方法來完成輸入輸出功能,這就允許Java應用程序采用相同的代碼,透明的方式來訪問不同輸入/輸出設備的數據流。所以處理流也叫做包裝流

下圖說明相關體系:

 

文件類:(File):提供文件操作功能(File可以創建,刪除等操作對文件或目錄,但是要訪問文件內容,就必須用到輸入/輸出流)

1.創建File類對象:File f;f = new File("Test.java");f = new File("E://ex//","Test.java");

2.將目錄也當作文件處理File類中提供了實現目錄管理功能的方法:File path = new File("E://ex//");File f = new File(path, "Test.java");

方法:f.getName():返回文件名 temp.datf.getParent():返回文件所在目錄名 dataf.getPath():返回文件路徑 data/temp.datf.getAbsolutePath():返回絕對路徑 …/data/temp.datf.exists():文件是否存在f.canWrite(), f.canRead():文件是否可寫、讀f.isFile(), f.isDirectory():是否為文件或目錄f.lastModified(), f.length(), f.delete():文件的最后修改日期、長度;刪除文件f.mkdir(), f.list():創建一個目錄;列出目錄下所有的文件

幾個例子說明:

復制代碼
import java.io.*;class FileTest{    public static void main(String[] str){        File f = new File("E://Workspace//aaa.txt");        //判斷是否存在該文件        if (!f.exists()){            System.out.PRintln("file is not exist");            try {                f.createNewFile();//不存在就創建新的文件            } catch (IOException e) {                e.printStackTrace();            }        }                File f1 = new File("E://Workspace//aaa1//sdfsdf//asdf");        if (f1.mkdir()){ //創建目錄            System.out.println("yes");        }        else{            System.out.println("errors ");        }    }}復制代碼復制代碼
import java.io.*;//瀏覽當前目錄下的所有文件和目錄class FileDirectory{     public static void main( String[] args ) {          try {             File f1 = new File("");             String ss = f1.getAbsolutePath();             System.out.println("ss= " + ss);             File f = new File(ss);             if( f.isDirectory() ) {                //獲取目錄下所有的文件列表                File[] files = f.listFiles();                for( int i=0; i<files.length; i++ ) {                   if( files[ i ].isDirectory() ) {                      System.out.println( "<dir> " + files[ i ].getName() );                   }                   else {                      System.out.println( files[ i ].getName() );                   }                }             }          }          catch( Exception e ) {             e.printStackTrace();          }             }    }復制代碼復制代碼
import java.io.*;class SuperTest{    public static void main(String args[]) {        File dir = new File("E://Workspace//Java//test20111108"); // 用File 對象表示一個目錄        Filter filter = new Filter("txt"); // 生成一個名為java的過濾器        System.out.println("list java files in directory " + dir);                String[] files = dir.list(filter); // 列出目錄dir下,文件后綴名為txt的所有文件                                    for (int i = 0; i < files.length; i++) {            File f = new File(dir, files[i]); // 為目錄dir 下的文件或目錄創建一個File 對象            if (f.isFile()) // 如果該對象為后綴為java的文件,則打印文件名                System.out.println("file: " + f);            else                System.out.println("sub directory " + f); // 如果是目錄則打印目錄名        }            }}class Filter implements FilenameFilter {    String extent;    Filter(String extent) {        this.extent = extent;    }        public boolean accept(File dir, String name) {                return name.endsWith("." + extent); //返回文件的后綴名    }}復制代碼

 

字節文件流:FileInputStream和FileOutputStream

復制代碼
import java.io.*;/***把一個文件的所有內容寫到另外一個文件中*/class FileStreamTest{    public static void main(String args[]) {        try {            File inFile=new File("test1.txt");            File outFile=new File("test2.txt");            FileInputStream fis=new FileInputStream(inFile);            FileOutputStream fos=new  FileOutputStream(outFile);                        int c;            while((c=fis.read())!=-1) //讀取一個字節            {                    fos.write(c);            }                        fis.close();            fos.close();        }catch(FileNotFoundException e) {              System.out.println("FileStreamsTest: "+e);        }catch(IOException e) {           System.err.println("FileStreamsTest: "+e);        }    }}復制代碼復制代碼
import java.io.*;class CopyFileTest{    public static void main(String args[]) {        CopyFileTest cf = new CopyFileTest ();        cf.copyFile("test1.txt","test3.txt");    }        public boolean copyFile(String src,String des){            File srcFile,desFile;        srcFile = new File(src);        desFile = new File(des);        FileInputStream fis = null;        FileOutputStream fos = null;            try{              desFile.createNewFile();              fis = new FileInputStream(srcFile);              fos = new FileOutputStream(desFile);//覆蓋            //  fos = new FileOutputStream(desFile,true);//追加              int bytesRead;              byte[] buf = new byte[4 * 1024];  // 4K buffer              while((bytesRead=fis.read(buf))!=-1){                fos.write(buf,0,bytesRead);              }              fos.flush();              fos.close();              fis.close();        }catch(IOException e){          System.out.println(e);          return false;        }          return true;        } }復制代碼

如果只是在尾部追加,而不是覆蓋需要調用FileOutputStream(“file”,true)就Ok了,對于字符流文件就是FileWriter(“file”,true)就OK樂。

 

父類過濾流:FilterInputStream(InputStream in);FilterOutputStream(OutputStream out);

 

過濾流—緩沖流

類BufferedInputStream和BufferedOutputStream繼承FilterInputStream和FilterOutputStream,實現了帶緩沖的過濾流,它提供了緩沖機制,把任意的I/O流“捆綁”到緩沖流上,可以提高該I/O流的讀取效率,在初始化時,除了要指定所連接的I/O流之外,還可以指定緩沖區的大小。在讀寫的同時對數據緩存,這樣避免每次讀寫數據都要進行實際的物理讀寫操作,在用BufferdOutputStream輸出時,數據先輸入緩沖區,當緩沖區滿的時再寫入連接的輸出流,可以調用flush()來清空緩沖區。

復制代碼
import java.io.*;class SuperTest{    public static void main(String args[]) {        try {            File inFile = new File("test1.txt");            File outFile = new File("test4.txt");                        BufferedInputStream bufFis=new BufferedInputStream(new FileInputStream(inFile),256);                        BufferedOutputStream bufFos=new BufferedOutputStream(new FileOutputStream(outFile),256);                                    int len;            byte bArray[]=new byte[256];                        do{                System.out.println("while");                len = bufFis.read(bArray);                bufFos.write(bArray,0,len);                System.out.println("len: " +len);            }while (len==256);                                        bufFis.close();            bufFos.close();        } catch (FileNotFoundException e) {            System.out.println("FileStreamsTest: " + e);        } catch (IOException e) {            System.err.println("FileStreamsTest: " + e);        }    }}復制代碼

 

過濾流—數據流

DataInputStream和DataOutputStream, 繼承FilterInputStream和FilterOutputStream,可以用來與計算機無關的格式讀寫JAVA的基本數據類型以及String對象。readBoolean() 讀一字節,非零為真readByte() 以8位讀字節readChar() 讀Unicode字符readInt() 讀整數值writeChar(int v) 把字符寫進輸出流writeLong(long v) 把長整寫進輸出流writeInt(int v) 把整數寫進輸出流

數據輸出流可以是一個已經建立好的輸入數據流對象,例如網絡的連結,文件等。數據流可通過如下方式建立。FileInputStream fis = new FileInputStream("file1.txt");FileOutputStream fos = new FileOutputStream("file2.txt");DataInputStream dis = new DataInputStream(fis);DataOutputStream dos = new DataOutputStream(fos);

復制代碼
import java.io.*;class DataStreamIOTest{    public static void main(String args[]) throws IOException     {        FileOutputStream fos = new FileOutputStream("a.txt");        DataOutputStream dos = new DataOutputStream(fos);        try {            dos.writeBoolean(true);            dos.writeByte((byte) 123);            dos.writeChar('J');            dos.writeDouble(3.141592654);            dos.writeFloat(2.7182f);            dos.writeInt(1234567890);            dos.writeLong(998877665544332211L);            dos.writeShort((short) 11223);        } finally {            dos.close();        }                FileInputStream fis = new FileInputStream("a.txt");        DataInputStream dis = new DataInputStream(fis);        try {            System.out.println("/t " + dis.readBoolean());            System.out.println("/t " + dis.readByte());            System.out.println("/t " + dis.readChar());            System.out.println("/t " + dis.readDouble());            System.out.println("/t " + dis.readFloat());            System.out.println("/t " + dis.readInt());            System.out.println("/t " + dis.readLong());            System.out.println("/t " + dis.readShort());        } finally {            dis.close();        }    }}//需要注意的是必須throws IOException才可以編譯通過。復制代碼

 

 

字符流

復制代碼
例子:利用FileWriter來寫文件    try        {            FileWriter fw = new FileWriter("mydata.txt");                         PrintWriter out = new PrintWriter(fw);             out.print("面朝大海,");            out.println("春暖花開!");            out.println("環境美好!!");            out.close();            fw.close();        }catch(IOException e)        {            e.printStackTrace();        }復制代碼復制代碼
例子:字符緩沖流BufferedReaderimport java.io.*;class SuperTest{    public static void main(String args[]) throws IOException    {        File file = new File("mydata.txt");                try {            BufferedReader in = new BufferedReader(new FileReader(file));            String s;            s = in.readLine();            while ( s != null ) {                System.out.println("Read: " + s);                s = in.readLine();            }            in.close();        } catch (FileNotFoundException e1) {            System.err.println("File not found: " + file);        } catch (IOException e2) {            e2.printStackTrace();        }    }}復制代碼復制代碼
例子:拷貝(FileReader和FileWriter)            try {                    FileReader input = new FileReader(args[0]);                    FileWriter output = new FileWriter(args[1]);                                        char[] buffer = new char[128];                    int charsRead;                    charsRead = input.read(buffer);                                        while ( charsRead != -1 )                     {                        output.write(buffer, 0, charsRead);                        charsRead = input.read(buffer);                    }                                        input.close();                    output.close();                } catch (IOException e)                 {                    e.printStackTrace();                            }            }復制代碼復制代碼
例子:拷貝(BufferedWriter)try {        FileReader input = new FileReader(args[0]);        BufferedReader bufInput = new BufferedReader(input);        FileWriter output = new FileWriter(args[1]);        BufferedWriter bufOutput = new BufferedWriter(output);        String line;                line = bufInput.readLine();        while ( line != null )         {            bufOutput.write(line, 0, line.length());            bufOutput.newLine();            line = bufInput.readLine();        }                bufInput.close();        bufOutput.close();    }     catch (IOException e)     {        e.printStackTrace();    }復制代碼

 

隨機存取文件流--RandomaccessFile1 RandomAccessFile是一種特殊的文件流,可以用它在文件的任何地方查找或者插入數據2 RandomAccessFile同時實現了DataInput和DataOutput接口,所以可以用它來讀/寫文件3構造器: RandomAccessFile(java.io.File f,String mode)RandomAccessFile(String file,String mode)4 mode可以為”r”或”rw”

方法:1 readXXX()或writeXXX():如ReadInt(), ReadLine(), WriteChar(), WriteDouble()等2 int skipBytes(int n):將指針向下移動若干字節3 length():返回文件長度4 long getFilePointer():返回指針當前位置5 void seek(long pos):將指針調到所需位置

復制代碼
import java.io.*;import java.util.*;class RandomAccessFileTest{    public static void main(String args[])    {        try{              File logfile=new File("mydata.txt");                            if(logfile.exists())              {    RandomAccessFile raf=new RandomAccessFile(logfile,"rw");                  System.out.println("leghth = " + raf.length());                  raf.seek(raf.length());                                    for(int i=0;i<5;i++)                  {                      raf.writeBytes("Write "+new Date()+ "/r/n");                  }                                      raf.seek(0);                  String x=raf.readLine();                                    while(x!=null)                  {                    System.out.println(x);                    x=raf.readLine();                  }                                    raf.close();              }           }catch(IOException e){              e.printStackTrace();            }    }}復制代碼

 

JAVA流總結:1 在Java中有數據傳輸的地方都用到I/O流(通常是文件,網絡,內存和標準輸入輸出等)。2 InputStream 和OutputStream是所有字節流的祖先(只有RandomAccessFile類是一個例外),read和write是它們最基本的方法,讀寫單位是字節3 Reader 和Writer是所有字符流的祖先,read和write是它們最基本的方法,讀寫單位是字符。4 在眾多的流對象中,并不是每一種都單獨使用,其中過濾流的子類在數據送出去之前做必要的處理5 File, File(Input/Output)Stream, RandomAccessFile是處理本地文件的類。6 Data(Input/Output)Stream是一個過濾流的子類,借此可以讀寫各種基本數據,在文件和網絡中經常使用。如: readByte, writeBoolean等。7 Buffered(Input/Output)Stream的作用是在數據送到目的之前先緩存,達到一定數量時再送到目的,已減少阻塞次。8 Piped(Input/Output)Stream適合與一個處理的輸出作為另一個處理的輸入的情況

學習Java的同學注意了?。?! 學習過程中遇到什么問題或者想獲取學習資源的話,歡迎加入Java學習交流群,群號碼:523047986  我們一起學Java!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲剧情一区二区| 爽爽爽爽爽爽爽成人免费观看| 成人网在线观看| 亚洲国产天堂久久国产91| 91精品国产综合久久香蕉922| 亚洲成人a**站| 亚洲电影在线看| 欧美老少配视频| 51视频国产精品一区二区| 在线精品国产成人综合| 日韩成人在线免费观看| 91精品啪aⅴ在线观看国产| 日韩国产精品亚洲а∨天堂免| 91精品国产91久久久久| 久久久免费高清电视剧观看| 国产一区二区三区18| 欧美精品日韩三级| 一区二区成人精品| 日韩亚洲综合在线| 成人黄色午夜影院| www.亚洲一二| 国产美女主播一区| 91欧美日韩一区| 日韩精品丝袜在线| 亚洲国产成人精品一区二区| xvideos国产精品| 91精品久久久久久久久中文字幕| 成人av.网址在线网站| 色偷偷亚洲男人天堂| 国产精品九九久久久久久久| 国产精品一久久香蕉国产线看观看| 日韩精品视频在线播放| 97成人在线视频| 国产成人精品在线观看| 日韩精品久久久久| 丰满岳妇乱一区二区三区| 国产精品视频区| 亚洲美女又黄又爽在线观看| 欧美激情在线一区| 精品二区三区线观看| 国产精品男人的天堂| 欧美人交a欧美精品| 国产精品99久久久久久www| 26uuu国产精品视频| 国产日韩精品入口| 久久天天躁狠狠躁老女人| 国产精品日韩精品| 成人国内精品久久久久一区| 亚洲美女激情视频| 日本久久中文字幕| 欧美激情国产精品| 色综合久久88色综合天天看泰| 2019中文在线观看| 国产精品久久久久99| 欧美国产激情18| 中文字幕亚洲天堂| 亚洲色图15p| 成人性生交大片免费观看嘿嘿视频| 日韩有码视频在线| 日韩一区av在线| 日韩资源在线观看| 美乳少妇欧美精品| 久久6精品影院| 91免费电影网站| xx视频.9999.com| 久久av资源网站| 国内精品模特av私拍在线观看| 国产精品综合不卡av| 久久久久久九九九| 日韩在线不卡视频| 欧美日韩久久久久| 日韩免费精品视频| 中文字幕一精品亚洲无线一区| 国产精品99免视看9| 欧美有码在线视频| 国产美女精品视频| 日韩av黄色在线观看| 精品综合久久久久久97| 亚洲国产日韩欧美在线动漫| 456亚洲影院| 日本午夜精品理论片a级appf发布| 色中色综合影院手机版在线观看| 欧美日韩国内自拍| 日韩美女在线看| 亚洲人成免费电影| 久久久久久91香蕉国产| 精品久久久久久亚洲国产300| 精品久久在线播放| 欧美在线视频网| www.日韩不卡电影av| 97超级碰碰碰| 在线观看欧美www| 国产精品久久在线观看| 丁香五六月婷婷久久激情| 黑人精品xxx一区| 亚洲欧美另类人妖| 成人av色在线观看| 国产欧美日韩精品丝袜高跟鞋| 久久综合久久美利坚合众国| 欧美另类极品videosbestfree| 国产亚洲视频中文字幕视频| 91精品国产自产在线观看永久| 国产日韩精品电影| 日韩av高清不卡| 91最新国产视频| 国外成人在线直播| 成人精品aaaa网站| 欧美在线视频观看免费网站| 国产伦精品一区二区三区精品视频| 97超级碰碰人国产在线观看| 91亚洲一区精品| 日韩一级黄色av| 日本欧美在线视频| 91国产精品视频在线| 亚洲国产精久久久久久久| 亚洲第一在线视频| 国产精品网红直播| 国产噜噜噜噜久久久久久久久| 日韩第一页在线| 亚洲性av网站| 欧美精品999| 中文字幕欧美精品在线| 中文字幕久久久av一区| x99av成人免费| 国产欧亚日韩视频| 欧美日韩国产中文精品字幕自在自线| 在线看欧美日韩| 国产成人极品视频| 亚洲乱亚洲乱妇无码| 影音先锋日韩有码| 亚洲免费一在线| 欧美大尺度激情区在线播放| 日本中文字幕久久看| 日韩电影中文字幕在线观看| 91色视频在线导航| 国产精品国产三级国产aⅴ9色| 日韩精品一区二区三区第95| 久久久久国产一区二区三区| 色悠悠国产精品| 热久久免费视频精品| 一区二区三区亚洲| 久久久久久久久久久久久久久久久久av| 亚洲最大福利视频网| 韩日欧美一区二区| 精品久久久久久久久久久久| 亚洲精品网站在线播放gif| 国产欧美一区二区| 国产精品久久久久久五月尺| 91av视频在线播放| 欧美—级高清免费播放| 亚洲在线免费看| 色老头一区二区三区| 九九热r在线视频精品| 精品久久久久久中文字幕| 亚洲一区二区久久久久久久| 国产91网红主播在线观看| 欧美国产日韩一区二区三区| 97成人在线视频| 色综合久综合久久综合久鬼88| 久久99热精品这里久久精品| 久久精品久久久久久| 国产精品∨欧美精品v日韩精品| 国产精品揄拍500视频| 国产亚洲精品久久久久久777|