中文字幕在线一区二区在线,久久久精品免费观看国产,无码日日模日日碰夜夜爽,天堂av在线最新版在线,日韩美精品无码一本二本三本,麻豆精品三级国产国语,精品无码AⅤ片,国产区在线观看视频

      Java入門基礎(chǔ)知識(shí):Java IO輸入/輸出

      時(shí)間:2024-09-23 22:55:21 JAVA認(rèn)證 我要投稿
      • 相關(guān)推薦

      Java入門基礎(chǔ)知識(shí):Java IO(輸入/輸出)

        Java中將輸入輸出抽象成流,流通過輸入輸出系統(tǒng)與物理設(shè)備連接,盡管與它們鏈接的物理設(shè)備不盡相同,所有流的行為具有同樣的方式。今天yjbys小編為大家?guī)碜钚翵ava入門基礎(chǔ)知識(shí)——Java IO(輸入/輸出),希望對(duì)同學(xué)們學(xué)習(xí)java基礎(chǔ)知識(shí)有所幫助!

      Java入門基礎(chǔ)知識(shí):Java IO(輸入/輸出)

        Java語言中的IO包支持Java的基本I/O(輸入/輸出)系統(tǒng),包括文件的輸入/輸出。Java所有的I/O機(jī)制都是基于數(shù)據(jù)流進(jìn)行輸入輸出,這些數(shù)據(jù)流表示了字符或者字節(jié)數(shù)據(jù)的流動(dòng)序列。Java的I/O流提供了讀寫數(shù)據(jù)的標(biāo)準(zhǔn)方法。任何Java中表示數(shù)據(jù)源的對(duì)象都會(huì)提供以數(shù)據(jù)流的方式讀寫它的數(shù)據(jù)的方法。

        Java I/O基礎(chǔ)流的概念

        java中將輸入輸出抽象成流,流通過輸入輸出系統(tǒng)與物理設(shè)備連接,盡管與它們鏈接的物理設(shè)備不盡相同,所有流的行為具有同樣的方式。將數(shù)據(jù)從外部(包括磁盤文件、鍵盤、套接字)讀入到內(nèi)存中的流稱為輸入流,將從內(nèi)存寫入到外部設(shè)備(控制臺(tái)、磁盤文件或者網(wǎng)絡(luò))的稱為輸出流。

        流的分類

        流序列中的數(shù)據(jù)既可以是未經(jīng)加工的原始二進(jìn)制數(shù)據(jù),也可以是經(jīng)一定編碼處理后符合某種格式規(guī)定的特定數(shù)據(jù)。因此Java中的流分為兩種:

        字節(jié)流:數(shù)據(jù)流中最小的數(shù)據(jù)單元是字節(jié) 多用于讀取或書寫二進(jìn)制數(shù)據(jù)

        字符流:數(shù)據(jù)流中最小的數(shù)據(jù)單元是字符, Java中的字符是Unicode編碼,一個(gè)字符占用兩個(gè)字節(jié)。

        提示

        在最底層,所有的輸入/輸出都是字節(jié)形式的;谧址牧髦粸樘幚碜址峁┓奖阌行У姆椒ā

        字節(jié)流

        字節(jié)流的最頂層是兩個(gè)抽象類:InputStream和OutputStream,其他關(guān)于處理字節(jié)的類都是它們的子類,這些子類對(duì)不同的外設(shè)進(jìn)行處理,例如磁盤文件,網(wǎng)絡(luò)連接,甚至是內(nèi)存緩沖區(qū)。

        抽象類InputStream 和 OutputStream中定義了實(shí)現(xiàn)其他流類的關(guān)鍵方法read()和write(),它們分別對(duì)數(shù)據(jù)的字節(jié)進(jìn)行讀寫。兩種方法都是抽象方法,被子類重載。

        例1 文件按字節(jié)流的方式拷貝

        import java.io.*;

        //byte streams are used to perform input and output of 8-bit bytes

        public class CopyFileByte {

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

        {

        FileInputStream in = null;

        FileOutputStream out = null;

        try {

        in = new FileInputStream("input.txt");

        out = new FileOutputStream("output.txt");

        int c;

        while ((c = in.read()) != -1) {

        out.write(c);

        }

        }finally {

        if (in != null) {

        in.close();

        }

        if (out != null) {

        out.close();

        }

        }

        }

        }

        例1中,上面使用的是文件名來創(chuàng)建FileInoutStream和FileOutputStream,實(shí)際上可以還可以使用文件對(duì)象來創(chuàng)建輸入輸出流。字節(jié)流的每次操作都是一個(gè)數(shù)據(jù)單位——字節(jié),假如input.txt文件中包含 Hello world ,那么它將復(fù)制完“H”之后,再?gòu)?fù)制“e”,接著就是“l”,如此類推直到其結(jié)束。in.read()每次從輸入流中讀取一個(gè)字節(jié),如果達(dá)到文件末尾就返回-1。使用完了,還要關(guān)閉這些字節(jié)流,調(diào)用close()方法。

        File inFile = new File("input.txt");

        File outFile = new File("output.txt");

        FileInputStream in = new FileInputStream(inFile);

        FileOutputStream out = new FileOutputStream(outFile);

        字符流

        java是使用16-bits來存儲(chǔ)字符數(shù)據(jù)的,涉及到的大多是字符操作,在程序中使用字符流會(huì)比字節(jié)流更加合適。類似于字節(jié)流,字符流的兩個(gè)頂層抽象類是Reader和Writer,一下是它們的子類處理字符流。

        類似于字節(jié),字符的抽象類Reader和 Writer中也定義了關(guān)鍵方法read()和write(),它們分別對(duì)字符進(jìn)行讀寫。兩種方法也都是抽象方法,被子類重載。

        例2 文件按字符流的方式拷貝

        import java.io.*;

        //Character streams are used to perform input and output for 16-bit unicode

        public class CopyFileCharacter {

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

        {

        FileReader in = null;

        FileWriter out = null;

        try {

        in = new FileReader("input.txt");

        out = new FileWriter("output.txt");

        int c;

        while ((c = in.read()) != -1) {

        out.write(c);

        }

        }finally {

        if (in != null) {

        in.close();

        }

        if (out != null) {

        out.close();

        }

        }

        }

        }

        和例1對(duì)比發(fā)現(xiàn),只有聲明的I/O流的類名不同,這里使用的FileReader和FileWriter,它們操作的最小單位是一個(gè)字符16bits,而FileInputStream和FileOutputStream最小單位則是一個(gè)字節(jié)8bits.

        java 自定義的標(biāo)準(zhǔn)流

        標(biāo)準(zhǔn)輸入流 System.in 讀取標(biāo)準(zhǔn)輸入設(shè)備數(shù)據(jù),例如鍵盤輸入(默認(rèn)),其類型是InputStream,三個(gè)重要的讀入方法:

        int read() 從輸入流中讀取數(shù)據(jù)的下一個(gè)字節(jié),返回ASCII碼。若,返回值=-1,說明沒有讀取到任何字節(jié)讀取工作結(jié)束

        int read(byte[] b) 從輸入流中讀取一定數(shù)量的字節(jié),并將這些數(shù)據(jù)存儲(chǔ)到緩沖區(qū)數(shù)組b中

        int read(byte[] b, int off, int len) 將輸入流中最多l(xiāng)en個(gè)字節(jié)讀入到字節(jié)數(shù)組b中

        標(biāo)準(zhǔn)輸出流 System.out 向標(biāo)準(zhǔn)的輸出設(shè)備寫入數(shù)據(jù),默認(rèn)情況下指控制臺(tái),其類型是PrintStream,包含兩個(gè)重要的方法:print()(不換行)和println()(輸出之后換行)

        標(biāo)準(zhǔn)錯(cuò)誤流 System.err 默認(rèn)也是控制臺(tái),類型和System.out相同是PrintStream,

        提示

        這些流都有默認(rèn)的設(shè)備,但它們可以重定向到任何兼容的輸入/輸出設(shè)備。

        控制臺(tái)的輸入和輸出

        正如上面所介紹的,控制臺(tái)的輸入、輸出是由System.in和System.out來完成的。目前,讀取控制臺(tái)的輸入輸出的首選方法的是字符流,但完成控制臺(tái)輸入的唯一方法是字節(jié)流,因而java提供了InputStreamReader和OutputStreamWriter將字節(jié)流轉(zhuǎn)化成字符流。BufferedReader是緩沖輸入字符流。正如我們?cè)诶又锌吹降模琷ava允許使用System.out向控制臺(tái)寫數(shù)據(jù),但在實(shí)際的項(xiàng)目中,它推薦使用PrintWriter,它是基于字符的。

        例3 控制臺(tái)輸入字符

        import java.io.*;

        class ConsoleInOut{

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

        char c;

        InputStreamReader isr = new InputStreamReader(System.in); //①

        BufferedReader br = new BufferedReader(isr); //②

        System.out.println("Enter characters, 'q' to exit.");

        c=(char)br.read();

        while(c != 'q'){

        System.out.println(c);

        c = (char) br.read();

        } ;

        }

        }

        輸出:

        D:\java>java ConsoleInOut

        Enter characters, 'q' to quit.

        Hello world!

        H

        e

        l

        l

        o

        w

        o

        r

        l

        d

        !

        q

        例3 中的①和②兩行創(chuàng)建了一個(gè)與鍵盤相連的BufferedReader對(duì)象,這里使用read()方法來讀取字符,當(dāng)?shù)竭_(dá)流的末尾時(shí)返回-1,輸入q退出程序。輸出我們使用的是println()方法,每次輸出后都換行。

        控制臺(tái)輸入字符我們使用的是read()方法,輸入字符串的話我們可以使用readLine()方法,和輸入字符非常相似,只需要將例3中的read()方法換成readLine()方法即可,同時(shí)將改為String類型,由于比較簡(jiǎn)單,此處不再贅述。

        提高

        我們來看java工具包中的輸入類Scanner。

        創(chuàng)建Scanner類的對(duì)象時(shí),需要用System.in 作為它的參數(shù),也可以將Scanner看作是System.in對(duì)象的支持者,System.in取得用戶輸入的內(nèi)容后,交給Scanner來作一些處理.

        Scanner類中提供了多個(gè)方法:next():取得一個(gè)字符串;

        hasNext():是否還有輸入;

        nextInt():將取得的字符串轉(zhuǎn)換成int類型的整數(shù);

        nextFloat():將取得的字符串轉(zhuǎn)換成float型;

        nextBoolean():將取得的字符串轉(zhuǎn)換成boolean型;

        提示

        使用Scanner非常方便,但也有不足,Scanner取得輸入的依據(jù)是空格符,包括空格鍵,Tab鍵和Enter鍵.當(dāng)按下這其中的任一鍵 時(shí),Scanner就會(huì)返回下一個(gè)輸入. 當(dāng)你輸入的內(nèi)容中間包括空格時(shí),顯然,使用Scanner就不能完整的獲得你輸入的字符串.

        例4 Scanner

        public static void main(String[] args){

        Scanner sc = new Scanner(new BufferedInputStream(System.in));

        while(sc.hasNext()){

        int m = sc.nextInt();

        String str = sc.next();

        for(int i=0; i

        System.out.println(sc.nextInt());

        }

        }

        }

        正如我們?cè)诶又锌吹降,java允許使用System.out向控制臺(tái)寫數(shù)據(jù),但在實(shí)際的項(xiàng)目中,它推薦使用PrintWriter,它是基于字符的。

        PrintWriter支持所有類型(包括Object)的print( )和println( )方法,這樣,我們就可以像用System.out那樣用這些方法。如果遇到不同類型的情況,PrintWriter方法調(diào)用對(duì)象的toString( )方法并打印結(jié)果。

        例5 控制臺(tái)的輸出

        import java.io.*;

        public class TestAbstract {

        public static void main(String args[]) {

        PrintWriter printerWriter = new PrintWriter(System.out, true);

        printerWriter.println("Hello World!");

        int i = -10;

        printerWriter.println(i);

        double d = 0.00003;

        printerWriter.println(d);

        }

        }

        D:\java>java TestAbstract

        Hello World!

        -10

        3.0E-5

        例5 中的new PrintWriter(System.out, true)新建了一個(gè)PrinterWriter對(duì)象,指定輸出流為System.out,true是每一行輸出之后進(jìn)行刷新。

        文件的輸入輸出

        文件

        文件File 位于java.io包中,用于描述文件和目錄的操作。創(chuàng)建文件對(duì)象如下:

        File file = new File("input.txt");//文件位于當(dāng)前目錄下

        File file = new File("/home/user","input.txt");//文件位于/home/user目錄下

        除了上述的File構(gòu)造方法之外,還有很多和File相關(guān)的方法如下:

        exists() 判斷文件或目錄是否存在

        mkdir() 創(chuàng)建目錄

        isFile()/isDirectory() 判斷是文件還是目錄

        delete() 刪除文件

        getPath() 獲取文件或者目錄的路徑

        list() 將目錄中所有文件名保存在字符串?dāng)?shù)組中返回

        例6 文件相關(guān)操作

        import java.io.*;

        public class TestAbstract {

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

        File dir = new File("D:/java");

        File file1 = new File(dir, "fileTest001.txt");

        File file2 = new File(dir, "fileTest002.java");

        if (!dir.exists())

        dir.mkdir();

        if (!file1.exists())

        file1.createNewFile();

        if (!file2.exists())

        file2.createNewFile();

        System.out.println("file1's AbsolutePath= " + file1.getAbsolutePath());

        System.out.println("file2's AbsolutePath= " + file2.getAbsolutePath());

        System.out.println("file1 Canread=" + file1.canRead());

        System.out.println("file1's len= " + file1.length());

        String[] fileList = dir.list();

        System.out.println("there are " + fileList.length + " file(s) in D:");

        }

        }

        運(yùn)行結(jié)果:

        D:\java>java TestAbstract

        file1's AbsolutePath= D:\java\fileTest001.txt

        file2's AbsolutePath= D:\java\fileTest002.java

        file1 Canread=true

        file1's len= 0

        there are 133 file(s) in D:

        I/O

        文件處理最常用的兩個(gè)流是FileInputStream和FileOutputStream,初始化的形式為:

        FileInputStream(String fileName) throws FileNotFoundException

        FileOutputStream(String fileName) throws FileNotFoundException

        或者

        FileInputStream(File fileName) throws FileNotFoundException

        FileOutputStream(File fileName) throws FileNotFoundException

        讀文件使用的是FileInputStream中定義的read()方法,它有很多種形式,具體可參考FileInputStream,寫文件是使用FileOutputStream中定義的write()方法,詳細(xì)參考FileOutputStream

        提示

        當(dāng)你對(duì)文件的操作結(jié)束后,需要調(diào)用close( )來關(guān)閉文件。

      【Java入門基礎(chǔ)知識(shí):Java IO輸入/輸出】相關(guān)文章:

      java的輸入語句小結(jié)03-27

      sun認(rèn)證考試:Java.io的使用01-08

      Java的基礎(chǔ)知識(shí)07-27

      Java基礎(chǔ)知識(shí)詳解12-07

      JAVA認(rèn)證基礎(chǔ)知識(shí):Java獲取當(dāng)前的系統(tǒng)時(shí)間03-18

      Java認(rèn)證基礎(chǔ)知識(shí):java字符串轉(zhuǎn)化整型問題03-18

      java必備基礎(chǔ)知識(shí)點(diǎn)03-07

      Java基礎(chǔ)知識(shí)點(diǎn)歸納03-05

      Java基礎(chǔ)知識(shí)大集合03-14

      主站蜘蛛池模板: 博客| 亚洲精品久久久蜜桃一区| 亚洲色图视频在线观看网站| 日韩av不卡一二三区| 航空| 久久精品国产亚洲一级二级| 国产99久久精品一区| 国产乱人伦偷精品视频| 亚洲乱在线播放| 美腿丝袜一区二区三区| 西畴县| 日本口爆吞精在线视频| 国产成人aa在线观看视频 | 国产亚洲精品hd网站| 原平市| 平定县| 垦利县| 临江市| 交城县| 呼伦贝尔市| 亚洲专区中文在线第一页| 浮梁县| 金门县| 静安区| 日日骚一区二区三区中文字幕| 郁南县| 六枝特区| 淮阳县| 菏泽市| 美腿丝袜一区二区三区| 久久婷婷国产精品简爱av| 明光市| 国产亚洲av日韩av| 在线观看黄片在线播放视频| av免费一区二区三区不卡| 亚洲av中文aⅴ无码av不卡| 亚洲综合网站精品一区二区| 亚洲综合自拍偷拍视频| 亚洲欧洲日产国码无码av野外| 女人一级特黄大片国产精品| 婷婷色亚洲五月在线国产精品麻豆 |