中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java輸入輸出流的示例分析

發布時間:2021-11-20 18:16:11 來源:億速云 閱讀:142 作者:柒染 欄目:云計算

Java輸入輸出流的示例分析,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

1Java輸入輸出流

所有的程序語言都提?copy;與本機文件系統交互的方式;Java也不例外。我們將看看Java是怎樣處理標準文件輸入輸出的(包括stdin,stout,stderr)。當你在網絡上開發小程序時,你必須注意直接文件輸入輸出是不安全因素的關鍵。大多數用戶設置他們的瀏覽器,可讓你自由的訪問他們的文件系統,但有?copy;不讓你訪問。當然,如果你開發你內部的應用程序,你也許需要直接訪問文件。

標準輸入輸出Unix的用戶,或其他基于命令行系統的用戶(如DOS),都知道標準輸入輸出的含義。標準輸入文件是鍵盤,標準輸出文件是你的終端屏幕。標準錯誤輸出文件也指向屏幕,如果有必要,它也可以指向另一個文件以便和正常輸出區分。

系統類Java通過系統類達到訪問標準輸入輸出的功能。上面提到的三個文件在這個系統類中實現:StdinSystem.in作為InputStream類的一個實例來實現stdin,你可以使用read()和skip(longn)兩個成員函數。read()讓你從輸入中讀一個字節,skip(longn)讓你在輸入中跳過n個字節。

StoutSystem.out作為PrintStream來實現stdout,你可以使用print()和println()兩個成員函數。這兩個函數支持Java的任意基本類型作為參數。

StderrSystem.err同stdout一樣實現stderr。象System.out一樣,你可以訪問PrintStream成員函數。

2標準輸入輸出例子

這里有一個例子,功能象Unix里的cat或type:

importjava.io.*classmyCat{publicvoidmain(Stringargs[])throwsIOException{intb;intcount=0;while((b=System.in.read())!=-1){count++;System.out.print((char)b);}System.out.println();//blanklineSystem.err.println("counted"+count+"totalbytes.");}}

3普通輸入輸出類

除了基本的鍵盤輸入和屏幕輸出外,我們還需要聯系文件的輸入輸出。我們將學習下面幾個類:lFileInputStreamlDataInputStreamlFileOutputStreamlDataOutputStream

作為參考,再列出一?copy;特定應用的類:lPipedInputStreamlBufferedInputStreamlPushBackInputStreamlStreamTokenizerlPipedOutputStreamlBufferedOutputStreamlRandomAccessFile

我們不在此討論這?copy;類,但你可以在JAVA_HOME/src/java/io目錄里查看每個類的成員函數定義。

4文件

在我們進行文件操作時,需要知道一?copy;關于文件的信息。File類提?copy;了一?copy;成員函數來操縱文件和獲得一?copy;文件的信息。

4.1創建一個新的文件對象

你可用下面三個方法來創建一個新文件對象:

FilemyFile;myFile=newFile("etc/motd");

myFile=newFile("/etc","motd");//moreusefulifthedirectoryorfilenamearevariables

FilemyDir=newfile("/etc");myFile=newFile(myDir,"motd");

這三種方法取決于你訪問文件的方式。例如,如果你在應用程序里只用一個文件,第一種創建文件的結構是最容易的。但如果你在同一目錄里打開數個文件,則第二種或第三種結構更好一?copy;。

4.2文件測試和使用

一?copy;你創建了一個文件對象,你便可以使用以下成員函數來獲得文件相關信息:

文件名lStringgetName()lStringgetPath()lStringgetAbslutePath()lStringgetParent()lbooleanrenameTo(FilenewName)

文件測試lbooleanexists()lbooleancanWrite()lbooleancanRead()lbooleanisFile()lbooleanisDirectory()lbooleanisAbsolute()

一般文件信息llonglastModified()llonglength()

目錄用法lbooleanmkdir()lString[]list()

4.3文件信息獲取例子程序

這里是一個獨立的顯示文件的基本信息的程序,文件通過命令行參數傳輸:

importjava.io.*;classfileInfo{FilefileToCheck;publicstaticvoidmain(Stringargs[])throwsIOException{if(args.length>0){for(inti=0;i<args.length;i++){fileToCheck=newFile(args[i]);info(fileToCheck);}}else{System.out.println("Nofilegiven.");}}publicvoidinfo(Filef)throwsIOException{System.out.println("Name:"+f.getName());System.out.println("Path:"=f.getPath());if(f.exists()){System.out.println("Fileexists.");System.out.print((f.canRead()?"andisReadable":""));System.out.print((f.cnaWrite()?"andisWriteable":""));System.out.println(".");System.out.println("Fileis"+f.lenght()="bytes.");}else{System.out.println("Filedoesnotexist.");}}}

5輸入流

InputStreamSequenceInputStreamFileInputStreamPipedInputStreamByteArrayInputStreamFileterInputStreamStringBufferInputStream

DataInputStreamLineNumberInputStreamPushbackInputStreamBufferedInputStream有好幾個類是專門用來處理文件輸入的。下面是文件輸入類的層次結構:

5.1FileInputStream對象

FileInputStream典型地表示一種順序訪問的文本文件。通過使用FileInputStream你可以訪問文件的一個字節、幾個字節或整個文件。

5.2打開FileInputStream

為一個文件打開輸入流FileInputStream,你必須將文件名或文件對象傳送給結構:

FileInputStreammyFileStream;myFileStream=newFileInputStream("/etc/motd");

你還可以象下邊這樣從FileInputStream里讀文件信息:

FilemyFile;FileInputSteammyFileStream;myFile=newFile("/etc/motd");myFileStream=newFileInputStream(myFile);

一?copy;FileInputStream輸入流打開,你就可以從里面讀取信息了。read()成員函數有以下幾種選項:

lintread()//readsonebyte//return-1atendofstreamlintread(byteb[])//fillsentirearray,ifpossible//returnsnumberofbytesread//returns-1ifendofstreamisreached

lintread(byteb[],intoffset,intlen)//readslenbytesintobstartingatb[offset]//Returnsnumberofbytesread,//or-1ifendofstreamisreached.

5.3關閉FileInputStream

當你完成一個文件的操作,你可選兩種方法關閉它:顯式關閉和隱式關閉,隱式關閉是自動垃圾回收時的功能。

顯式關閉如下:myFileStream.close();

6例程:顯示一個文件

如果文件的訪問權限足夠,你可以在TextArea對象里顯示文件內容。

下面是顯示文件的程序片斷:

FileInputStreamfis;TextAreata;publicvodinit(){byteb[]=newbyte[1024];intI;//makeitbigenoughorwaituntilyou//knowthesizeofthefileStrings;try{fis=newFileInputStream("/etc/motd");}catch(FileNotFoundExceptione){/*dosomethingappropriate*/}try{I=fis.read(b);}catch(IOExceptione){/*dosomethingappropriate*/}s=newString(b,0);ta=newTextArea(s,5,40);add(ta);}

7DataInputStreams

DataInputStreams與FileInputStreams差不多。Data流可以直接讀任意一種變量類型,如浮點數,整數和字符等。一般來說,對二進制文件使用DataInputStream流。

7.1打開和關閉DataInputStreams

打開和關閉DataInputStreams對象時,其方法與FileInputStreams相同:

DataInputStreamsmyDataStream;FileInputStreamsmyFileStream;

//getafilehandlemyFileStream=newFileInputStream("/usr/db/stock.dbf");//open,or"chain"adatainputfilemyDataStream=newDataOutputStream(myFileStream);

//Nowwecanusebothinputstreamstoaccessourfile//j(Ifwewantto...)myFileStream.read(b);I=myDataStrea.readInt();

//closethedatafrielexplicityly//Alwaysclosethe"topmost"filestreammyDataStream.close();myFileStream.close();

7.2讀DataInputStreams

當你從DataInputStreams流里訪問文件時,你可以使用與FileInputStream流相同的成員函數read()。但你也可以使用其他訪問方法來讀取不同種類的數據:

lbytereadByte()lintreadUnsignedByte()lshortreadShort()lintreadUnsighedShort()lcharreadChar()lintreadIntllongreadLong()lfloatreadFloat()ldoublereadDouble()lStringreadLine()

以上每一個成員函數都讀取相應的數據對象。象StringreadLine()成員函數,你可使用\n,\r,\r\n,或EOF作為字符?reg;結束符。

讀一個長整型,例如:

longserialNo;...serialNo=myDataStream.readLong();

8URL輸入流

除了基本文件訪問外,Java還提?copy;了通過網絡使用URL訪問對象的功能。在下面這個例子里,我們用getDocumentBase()成員函數并顯式指定URL對象來訪問聲音和圖象。

StringimageFile=newString("images/Duke/T1.gif");images[0]=getImage(getDocumentBase(),imageFile();

如果我們愿意,可以直接使用URL:URLimageSource;imageSource=newURL("https://cache.yisu.com/upload/information/20210522/355/675820.gif");

我們可以為相應的URL打開輸入流。例如,下面的程序里包括一個數據文件:InputStreamis;bytebuffer[]=newbyte[24];is=newURL(getDocumentBase(),dataname).openStream();

現在我們可以使用is,就象使用FileInputStream對象一樣:is.read(buffer.0,buffer.length);

注意:有?copy;用戶設置了他們的瀏覽器安全屬性,可以不讓你的程序訪問他們的文件。

9OutputStreams

上面我們談到了讀數據,那么如何實現寫數據呢?象輸入流一樣,輸出流也有類似的層次結構:

OutputStream

FileOutputStreamPipedOutputStreamByteArrayOutputStreamFilterOutputStream

DataOutputStreamPrintStreamBufferedOutputStream

我們將分析FileOutputStream和DataOutputStream類來完成我們碰到的輸出流問題。其它的輸出流包含了更多的信息和成員函數。象輸入流的源文件一樣,這?copy;文件在$JAVA_HOME/src/java/io目錄下。

9.1FileOutputStream類

FileOutputStream對象用于向一個文本文件寫數據。象輸入文件一樣,你得先打開這個文件后才能寫這個文件。

9.2打開一個FileOutputStream對象

要打開一個FileOutputStream對象,象打開一個輸入流一樣,你可以將字符?reg;或文件對象作為參數:FileOutputStreammyFileStream;myFileStream=newFileOutputStream("/etc/motd");

象輸入流一樣,你也可這樣使用:FilemyFile;FileOutputStreammyFileStream;myFile=newFile("/etc/motd");myFileStream=newFileOutputStream(myFile);

9.3寫入一個流

一?copy;文件被打開,你便可以使用write()函數向文件里寫一?copy;數據。就象輸入流的read()函數一樣,你可有三種方法:lvoidwrite(intb);//writesoutonebytelvoidwrite(byteb[]);//writesoutentirearraylvoidwrite(byteb[],intoffset,intlength);//writeoutlengthbytesofb[],startingatb[offset]

9.4關閉一個FileOutputStream對象

關閉輸出流和關閉輸入流方法一樣,你可以使用顯式方法:myFileStream.close();你也可以讓系統自動關閉它。

10例子:存儲信息

下面有一個程序,讓用戶輸入一?copy;姓名和電話號碼。每一個姓名和號碼將加在文件里。用戶通過點“Done"按鈕來告訴系統整個列表已輸入完畢。

一?copy;用戶輸入完整個列表,程序將創建一個輸出文件并顯示或打印出來。例如:

555-1212,Tom123-456-7890,PeggyL.234-5678,Marc234-5678,Ron876-4321,Beth&Brian33.1.42.45.70,Jean-Marc

下面是程序的源代碼:importjava.io.*;

//Phones.java//Asimpledatabasecreationprogram

classPhones{staticFileOutputStreamfos;publicstaticfinalintlineLength=81;publicstaticvoidmain(Stringargs[])throwsIOExciption{byte[]phone=newbyte[lineLength];byte[]name=newbyte[lineLenght];intI;fos=newFileOutputStream("phone.numbers");while(true){System.err.println("Enteraname(enter'done'toquit)");readLine(name);if("done".equalsIgnoreCase(newString(name,0,0,4))){break;}System.err.println("Enterthephonenumber");readLine(phone);for(i=0;phone[i]!=0;i++){fos.write(phone[i]);}fos.write(',');for(i=0;name[i]!=0;I++){fos.write(name[i]);}fos.write('\n');}fos.close();}

privatestaticvoidreadLine(byteline[])throwsIOException{inti=0,b=0;

while((i<lineLengh-1))&&((b=System.ini.read())!='\n')){line[i++]=(byte)b;}line[i]=(byte)0;}}

11BufferedOutput流

如果你處理的數據量很多,或向文件寫很多次小數據,你可以使用一個BufferedOutput流。BufferedOutput流提?copy;和FileOutputStream類同樣的寫操作方法,但所有輸出全部存放在一個緩沖區里。當你填滿緩沖區,它將一次性寫入磁盤。或者你主動將緩沖區寫入磁盤。

11.1創建BufferedOutput流

如果要創建一個BufferedOutput流,首先需要一個FileOutput流。然后將緩沖區鏈接到FileOutput流:FileOutputStreammyFileStream;BufferedOutputStreammyBufferStream;//getafilehandlemyFileStream=newFileOutputStream("/usr/db/stock.dbf");//chainabufferedoutputstreammyBufferSSstream=newBufferedOutputStream(myFileStream);

11.2更新和關閉BufferedOutput流

和普通FileOutput流一樣,向BufferedOutput流里的每一次寫操作和寫入磁盤操作并不是一一對應的。要想在程序結束?reg;前將緩沖區里的數據寫入磁盤,除非填滿緩沖區,否則只有顯式調用flush()函數://forceleft-overdatatodiskmyBufferStream.flush();//closethedatafileexplicitly//Alwaysclosethe"topmost"filestreammyBufferStream.close();myFileStream.close();

12DataOutput流

和DataInputStream對應,Java還提?copy;了DataOutput流。使用DataOutput流,我們可以向文件寫入二進制數據。

12.1打開和關閉DataOutput流對象

打開和關閉DataOutput流對象與打開、關閉FileOutput流對象方法一樣:DataOutputStreammyDataStream;FileOutputStreammyFileStream;BufferedOutputStreammyBufferStream;

//getafilehandlemhyFileStream=newFileOutputStream("/usr/db/stock.dbf");//chainabufferedoutputstream(forefficiency);myBufferStream=newBufferedOutputStream(myFileStream);//chainadataoutputfilemyDataStream=newDataOutputStream(myBufferStream);

//Nowwecanusebothinputstreamstoaccessourfile//(iiIfwewantto...)myBufferStream.write(b);myDataStream.writeInt(i);

//closethedatafileexplicitly//Alwayscolsethe"topmost"filestreammyDataStream.close();myBuffersStream.close();myFileStream.close();

12.2向DataOutput流寫數據

FileOutput流里的write()函數各種方法都適用于DataOutput流。你還可以看到DataInput流的類似函數方法:lvoidwriteBoolean(booleanv)lvoidwriteByte(intv)lvoidwriteShort(intv)lvoidwriteChar(intv)lvoidwriteInt(intv)lvoidwriteFloat(floatv)lvoidwriteDouble(doublev)lvoidwriteBytes(strings)lvoidwriteChars(strings)

對字符?reg;來說,有兩種選擇:byte和char。記住byte是8位數據而char是16位數據。如果你想利用Unicode字符的優點,你應使用writeChars()函數。

12.3輸出記數

在使用二進制數據輸出時常用的另外一個函數是size()。這個函數返回寫入文件數據的總字節數。你也可用size()函數將數據文件分成四字節為單位的塊,例如:...intbytesLeft=myDataStream.size()%4;for(intI=0;I<bytesLeft;I++){myDataStrea.write(0);}...

13隨機訪問文件

我們讀文件常常不是從頭至尾順序讀的。你也許想將一文本文件當作一個數據庫,讀完一個記錄后,跳到另一個記錄,它們在文件的不同地方。Java提?copy;了RandomAccessFile類讓你操作這種類型的輸入輸出。

13.1創建隨機訪問文件

打開隨機訪問文件有兩種方法:l用文件名myRAFile=newRandomAccessFile(Stringname,Stringmode);l用文件對象myRAFile=newRandomAccessFile(Filefile,Stringmode);

mode參數決定了訪問文件的權限,如只讀'r'或讀寫'wr'等。

例如,我們打開一個數據庫更新數據:RandomAccessFilemyRAFile;myRAFile=newRandomAccessFile("/usr/db/stock.dbf","rw");

13.2訪問信息

RandomAccessFile對象的讀寫操作和DataInput/DataOutput對象的操作方式一樣。你可以使用在DataInputStream和DataOutputStream里出現的所有read()和write()函數。

還有幾個函數幫助你在文件里移動指針:llonggetFilePointer();返回當前指針lvoidseek(longpos);將文件指針定位到一個絕對地址。地址是相對于文件頭的偏移量。地址0表示文件的開頭。llonglength();返回文件的長度。地址"length()"表示文件的結尾。

13.3增加信息

你可以使用隨機訪問文件來設置成增加信息模式:myRAFile=newRandomAccessFile("/tmp/java.log","rw");myRAFile.seek(myRAFile.length());//Anysubsequentwrite()swillbeappendedtothefile

9.13.4追加信息例子下面是一個在已存在文件后面追加字符?reg;的例子:importjava.io.IOException;importjava.io.RandomAccessFile;

classraTest{publicstaticvoidmain(Stringargs[])throwsIOException{RandomAccessFilemyFAFile;Strings="InformationtoAppend\nHimom!\n";//openourrandomaccessfilemyRAFile=newRandomAccessFile("/tmp/java.log","rw");//movetotheendofthefilemyRAFile.seek(myRAFile.length());//Startappending!myRAFile.writeBytes(s);

myRAFile.close();}}

1.Java通過系統類達到訪問標準輸入輸出的功能。2.你可以創建、讀、寫文件。

關于Java輸入輸出流的示例分析問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

白玉县| 彰化县| 卢氏县| 台东县| 林芝县| 仁怀市| 宿州市| 兰西县| 深水埗区| 浪卡子县| 九寨沟县| 金昌市| 达日县| 淅川县| 镇原县| 太仆寺旗| 桓台县| 陆丰市| 汉中市| 教育| 青冈县| 吉安县| 揭阳市| 郸城县| 铜鼓县| 抚远县| 鄂伦春自治旗| 荥经县| 分宜县| 长治市| 屯门区| 蒲江县| 建始县| 承德市| 象州县| 渑池县| 通化市| 隆德县| 钦州市| 同江市| 农安县|