程序設(shè)計(jì)第15章輸入輸出流和文件操作ppt課件
《程序設(shè)計(jì)第15章輸入輸出流和文件操作ppt課件》由會(huì)員分享,可在線閱讀,更多相關(guān)《程序設(shè)計(jì)第15章輸入輸出流和文件操作ppt課件(43頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
第十五章 輸入輸出流與文件操作,目 錄,重點(diǎn)與難點(diǎn)點(diǎn)撥,輸入輸出流的分類,目錄和文件管理,文件和隨機(jī)訪問(wèn),其他常用的流,綜合案例,字符流,字節(jié)流,經(jīng)典練習(xí)題,本章知識(shí)重點(diǎn),輸入輸出流的分類,java.io包中流的體系結(jié)構(gòu),目錄和文件管理涉及到的類,輸入輸出流的概念,本章知識(shí)難點(diǎn),目錄和文件管理涉及到的類,流輸入及輸出的一般過(guò)程,輸入輸出流的分類,Java 流的概念 Java使用流(stream)來(lái)執(zhí)行輸入輸出(I/O)的功能,流是一 種數(shù)據(jù)的源頭和目的之間的通信途徑 標(biāo)準(zhǔn)輸入輸出 Java系統(tǒng)事先定義好兩個(gè)流對(duì)象,分別與系統(tǒng)的標(biāo)準(zhǔn)輸入 和標(biāo)準(zhǔn)輸出相聯(lián)系,它們是System. in和System.out System是Java中一個(gè)功能很強(qiáng)大的類,利用它可以獲得很 多Java運(yùn)行時(shí)的系統(tǒng)信息。,【例15.1】,輸出流(程序?qū)懗鰯?shù)據(jù)),輸入流(程序讀入數(shù)據(jù)),Java流類體系結(jié)構(gòu)1,Java流類體系結(jié)構(gòu)2,Java流類體系結(jié)構(gòu)3,Java流類體系結(jié)構(gòu)4,——Java流的概念,,輸入輸出流的分類,目錄和文件管理,,文件名的處理,File類,文件或目錄的生成,文件屬性測(cè)試,普通文件信息和工具,目錄操作,◆public File(String path):如果path是實(shí)際存在的路徑,則該File對(duì)象表示的是目錄;如果path是文件名,則該File對(duì)象表示的是文件。 ◆public File(String path,String name):path是路徑名,name是文件名(不可為空)。 ◆public File(File dir,String name):dir是路徑名,name是文件名。,◆String getName( ):得到一個(gè)文件的名稱(不包括路徑)。 ◆String getPath( ):得到一個(gè)文件的路徑名。 ◆String getAbsolutePath( ):得到一個(gè)文件的絕對(duì)路徑名。 ◆String getParent( ):得到一個(gè)文件的上一級(jí)目錄名。 ◆String renameTo(File newName):將當(dāng)前文件名更名為給定文件的完整路徑。,【例15.2】,◆boolean exists( ):測(cè)試當(dāng)前File對(duì)象所指示的文件或目錄是否存在,若存在,返回True。 ◆boolean createNewFile():創(chuàng)建當(dāng)前文件。 ◆boolean canWrite( ):測(cè)試當(dāng)前文件是否可寫(xiě)。 ◆boolean canRead( ):測(cè)試當(dāng)前文件是否可讀。 ◆boolean isFile( ):測(cè)試當(dāng)前文件是否是文件(不是目錄)。 ◆boolean isDirectory( ):測(cè)試當(dāng)前文件是否是目錄,若為目錄則返回True。,【例15.3】,◆long lastModified( ):得到文件最近一次修改的時(shí)間。 ◆long length( ):得到文件的長(zhǎng)度,以字節(jié)為單位,若不存在,返回0。 ◆boolean delete( ):刪除File對(duì)象代表的文件或目錄,目錄需為空。刪除成功,返回True。,◆boolean mkdir():生成一個(gè)由該對(duì)象指定的路徑(新目錄),若成功,返回True。 ◆boolean mkdirs():生成一個(gè)新的目錄,包含子目錄。若成功,返回true。 ◆boolean renameTo(File newName):將當(dāng)前File對(duì)象所代表的路徑名改為newName所代表的路徑名。若成功,返回true。 ◆String list():列出當(dāng)前目錄下的文件。 ◆File[] listFiles():得到該對(duì)象所代表的目錄下的File對(duì)象數(shù)組。 ◆String toString():得到抽象路徑表示法。,【例15.4】,File類的應(yīng)用,【例15.5】,【例15.6】,字節(jié)流,順序讀/寫(xiě)文件(FileInputStream與FileOutputStream),⑴FileInputStream類從磁盤(pán)文件讀取數(shù)據(jù)。常用的構(gòu)造方法有: ◆FileInputStream(String name):打開(kāi)文件name用來(lái)讀取數(shù)據(jù)。 如:FileInputStream f =new FileInputStream(“c:/test.txt“); ◆FileInputStream(File file):打開(kāi)文件file用來(lái)讀取數(shù)據(jù)。 如:File f=new File(“c:/test.txt“); FileInputStream f1=new FileinputStream(f); ◆將FileDescriptor對(duì)象作為其參數(shù)。 如:FileDescriptor() fd=new FileDescriptor(); FileinputStream f2=new FileInputstream(fd);,⑵FileOutputStream類創(chuàng)建文件(如果文件不存在),并將數(shù)據(jù)寫(xiě)入文件。FileOutputStream類常用的構(gòu)造方法有: ◆FileOutputStream(String name):打開(kāi)文件name用來(lái)寫(xiě)入數(shù)據(jù)。 如:FileOutputStream f=new FileOutputStream (“c:/test.txt“); ◆FileOutputStream(File file):打開(kāi)文件file用來(lái)寫(xiě)入數(shù)據(jù)。 如:File f =new File(“c:/test.txt“); FileOutputStream f1=new FileOutputStream (f); ◆FileOutputStream(String name,Boolean append):打開(kāi)文件name用來(lái)寫(xiě)入數(shù)據(jù),若append為true,則寫(xiě)入的數(shù)據(jù)會(huì)加到原有文件后面,否則,覆蓋原有的文件。 如:FileOutputStream f =new FileOutputStream(“c:/test.txt“,true); ◆將FileDescriptor對(duì)象作為其參數(shù)。 FileDescriptor() fd =new FileDescriptor(); FileOutputStream f =new FileOutputStream(fd);,【例15.7】,字節(jié)流,字節(jié)流,⑴ByteArrayInputStream 將字節(jié)數(shù)組用作源,并在該數(shù)組中執(zhí)行讀操作 它有兩種構(gòu)造方法。第一種構(gòu)造方法將字節(jié)數(shù)組作為參數(shù)。 ◆ByteArrayInputStream(byte[] buffer):生成一個(gè)字節(jié)數(shù)組的輸入流,并指定一個(gè)字節(jié)數(shù)組buffer為此輸入流的流緩沖區(qū)。 如:ByteArrayInputStream b =new ByteArrayInputStream(buf[]); 另外一種構(gòu)造方法有助于從指定的字節(jié)數(shù)組來(lái)創(chuàng)建ByteArrayInputStream。 ◆ByteArrayinputStream b =new ByteArrayinputStream(buf[],off,len); 其中off 是要讀取的第一個(gè)字節(jié)的偏移,len 是要讀取數(shù)組的字節(jié)數(shù);,⑵ByteArrayOutputStream有2種構(gòu)造方法 ◆ByteArrayOutputStream():生成一個(gè)字節(jié)數(shù)組的輸出流,其緩沖區(qū)的默認(rèn)初始大小為32字節(jié),若有需要,緩沖區(qū)的大小會(huì)隨之增加。 如:ByteArrayOutPutStream b=new ByteArrayOutputStream(); ◆ByteArrayOutputStream(int size):創(chuàng)建32個(gè)自己的緩沖器用于儲(chǔ)存數(shù)據(jù),但分配size字節(jié)的初始大小給此緩沖區(qū)。 如:ByteArrayOutputStream b1=new ByteArrayOutputStream(size);創(chuàng)建大小為size的緩沖器,⑶ByteArrayOutputStream的一些常用方法: ◆int size():返回此流緩沖區(qū)的大小。 ◆byte[] toByteArray():生成一個(gè)新的字節(jié)數(shù)組,并將流的內(nèi)容復(fù)制到此字節(jié)數(shù)組。 ◆String toString():將流的內(nèi)容轉(zhuǎn)換為String對(duì)象。,【例15.8】,字節(jié)流,緩沖區(qū)流BufferedInputStream和BufferedOutputStream,⑴BufferedInputStream類的構(gòu)造方法和方法: ◆BufferedInputStream(InputStream in):構(gòu)造一個(gè)BufferedInputStream。 ◆BufferedInputStream(InputStream in, int size):構(gòu)造一個(gè)具有給定的緩沖區(qū)大小的BufferedInputStream。 ◆int available():得到可以從這個(gè)輸入流讀取的字節(jié)數(shù)。 ◆void close():關(guān)閉流。 ◆void mark(int readlimit):在這個(gè)輸入流的當(dāng)前位置做標(biāo)記。 ◆boolean markSupported():檢查這個(gè)輸入流是否支持mark和reset方法。 ◆int read():讀取數(shù)據(jù)的下一個(gè)字節(jié)。 ◆int read(byte[] b, int off, int len):從這個(gè)字節(jié)輸入流的給定偏移量處開(kāi)始讀取字節(jié),存儲(chǔ)到給定的字節(jié)數(shù)組。 ◆void reset():將緩沖區(qū)重新設(shè)置到加標(biāo)記的位置。 ◆long skip(long n):跳過(guò)n個(gè)字節(jié)的數(shù)據(jù)。,⑵BufferedOutputStream類的構(gòu)造方法和方法: ◆BufferedOutputStream(OutputStream out):構(gòu)造一個(gè)BufferedOutputStream。 ◆BufferedOutputStream(OutputStream out, int size):構(gòu)造一個(gè)具有給定的緩沖區(qū)大小的BufferedOutputStream。 ◆void flush():刷新這個(gè)流。 ◆void write(byte[] b, int off, int len):將給定的字節(jié)數(shù)組寫(xiě)到這個(gè)緩沖輸出流。 ◆void write(int b):將給定的字節(jié)寫(xiě)到這個(gè)緩沖輸出流。,【例15.9】,字符流,字符流,InputStreamReader和OutputStreamWriter,⑴InputStreamReader類的構(gòu)造方法和方法: ◆InputStreamReader(InputStream in):構(gòu)造一個(gè)InputStreamReader。 ◆InputStreamReader(InputStream in, String enc):使用命名的字符編碼構(gòu)造一個(gè)InputStreamReader。 ◆void close():關(guān)閉流。 ◆String getEncoding():得到字符編碼的名稱。 ◆int read():讀取一個(gè)字符。 ◆int read(char[] cbuf, int off, int len):將字符讀到數(shù)組中。 ◆boolean ready():如果這個(gè)流已準(zhǔn)備好,返回True。,⑵OutputStreamWriter類的構(gòu)造方法和方法: ◆OutputStreamWriter(OutputStream out):構(gòu)造一個(gè)OutputStreamWriter。 ◆OutputStreamWriter(OutputStream out, String enc):使用命名的字符編碼構(gòu)造一個(gè)OutputStreamWriter。 ◆void close():關(guān)閉流。 ◆void flush():刷新流。 ◆String getEncoding():得到這個(gè)流使用的字符編碼的名稱。 ◆void write(char[] cbuf, int off, int len):寫(xiě)字符數(shù)組的一部分。 ◆void write(int c):寫(xiě)一個(gè)字符。 ◆void write(String str, int off, int len):寫(xiě)一個(gè)字符串的一部分。,【例15.10】,字符流,FileReader,◆FileReader(File file):構(gòu)造一個(gè)FileReader。 ◆FileReader(FileDescriptor fd):從一個(gè)文件描述符構(gòu)造一個(gè)FileReader。 ◆FileReader(String filename):從一個(gè)文件名構(gòu)造一個(gè)FileReader。,【例15.11】,字符流,FileWriter,◆FileWriter(File file):從File對(duì)象構(gòu)造一個(gè)FileWriter。 ◆FileWriter(FileDescriptor fd):從文件描述符構(gòu)造一個(gè)FileWriter。 ◆FileWriter(String filename):從文件名構(gòu)造一個(gè)FileWriter。 ◆FileWriter(String filename, boolean append):構(gòu)造一進(jìn)行附加的FileWriter。,【例15.12】,字符流,BufferedReader和BufferedWriter,這兩個(gè)類對(duì)應(yīng)的流使用了緩沖,能大大提高輸入輸出的效率。這兩個(gè)也是過(guò)濾器流,常用來(lái)對(duì)InputStreamReader和OutputStreamWriter進(jìn)行處理。,【例15.13】,字符流,CharArrayReader和CharArrayWriter,⑴CharArrayReader類的構(gòu)造方法和方法如下: ◆CharArrayReader(char[] buf):從給定的字符數(shù)組構(gòu)造一個(gè)CharArrayReader。 ◆CharArrayReader(char[] buf, int offset, int length):同上。 ◆void close():關(guān)閉流。 ◆void mark(int readAheadLimit):在流中的當(dāng)前位置加標(biāo)記。 ◆boolean markSupported():如果這個(gè)流支持mark操作,那么返回True。 ◆int read():讀取一個(gè)字符。 ◆int read(char[] b, int off, int len):將字符讀入數(shù)組的一部分。 ◆boolean ready():檢查這個(gè)流是否已經(jīng)準(zhǔn)備好被讀取。 ◆void reset():將流重設(shè)到最近的標(biāo)記。 ◆long skip(long n):跳過(guò)n個(gè)字符。,⑵CharArrayWriter類的構(gòu)造方法和方法如下: ◆CharArrayWriter():構(gòu)造一個(gè)CharArrayWriter。 ◆CharArrayWriter(int initialSize):構(gòu)造一個(gè)具有給定初始大小的CharArrayWriter。 ◆void close():關(guān)閉流。 ◆void flush():刷新流。 ◆void reset():重設(shè)流。 ◆int size():得到緩沖區(qū)的當(dāng)前大小。 ◆char[] toCharArray():得到輸入數(shù)據(jù)的副本。 ◆String toString():將輸入數(shù)據(jù)轉(zhuǎn)換為字符串。 ◆void write(char[] c, int off, int len):將字符寫(xiě)到緩沖區(qū)中。 ◆void write(int c):將一個(gè)字符寫(xiě)到緩沖區(qū)中。 ◆void write(String str, int off, int len):將字符串的一部分寫(xiě)到緩沖區(qū)中。 ◆void writeTo(Writer out):將緩沖區(qū)的內(nèi)容寫(xiě)到另一個(gè)字符流中。,【例15.14】,文件的隨機(jī)訪問(wèn),◆RandomAccessFile(File file, String mode):構(gòu)造一個(gè)隨機(jī)訪問(wèn)文件流,file為被訪問(wèn)的文件對(duì)象,mode是用來(lái)指定存取的模式,mode可以為r(讀)、w(寫(xiě))或rw(讀寫(xiě))。 ◆RandomAccessFile(String name,String mode):構(gòu)造一個(gè)隨機(jī)訪問(wèn)文件流,以便訪問(wèn)由字符串name指定名字的文件,mode參數(shù)使用同上,◆boolean readBoolean() ◆byte readByte() ◆char readChar() ◆double readDouble() ◆float readFloat() ◆int readInt() ◆long readLong() ◆short readShort() ◆String readLine(),◆void writeByte(byte b) ◆void writeBytes(String s) ◆void writeChar(char c) ◆void writeChars(String s) ◆void writeDouble(double d) ◆void writeFloat(float f) ◆void writeInt(int i) ◆void writeLong(long l) ◆void writeShort(short s),◆void seek(long pos):將文件指針移到pos(不可為負(fù))的位置,相對(duì)于文件初始位置值(初始值為0)。 ◆long getFilePointer():得到目前文件指針的位置(相對(duì)于文件初始位置)。 ◆long length():得到文件的長(zhǎng)度。 ◆int skipBytes( int n ):使文件指針向前移動(dòng)指定的n個(gè)字節(jié),【例15.15】,其他常用的流,管道流,ZIP文件流,DataInputStream和DataOutputStream,對(duì)象流,綜合案例,【例15.16】下面的代碼實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的文件編輯器,import java.awt.*; import java.awt.event.*; import java.io.*; public class FileEdit extends WindowAdapter implements ActionListener,TextListener{ Frame f; TextArea ta1; Panel p1; TextField tf1; Button b1,b2,b3; FileDialog fd; File file1=null; public static void main(String args[]){ (new FileEdit()).display(); },綜合案例(續(xù)),public void display(){ f = new Frame(“FileEdit“); f.setSize(680,400); f.setLocation(200,140); f.setBackground(Color.lightGray); f.addWindowListener(this); tf1 = new TextField(); tf1.setEnabled(false); tf1.setFont(new Font(“Dialog“,0,20)); //設(shè)置文本行的初始字體 f.add(tf1,“North“); ta1 = new TextArea(); ta1.setFont(new Font(“Dialog“,0,20)); //設(shè)置文本區(qū)的初始字體 f.add(ta1); ta1.addTextListener(this); //注冊(cè)文本區(qū)的事件監(jiān)聽(tīng)程序 p1 = new Panel(); p1.setLayout(new FlowLayout(FlowLayout.LEFT));,綜合案例(續(xù)),b1 = new Button(“Open“); b2 = new Button(“Save“); b3 = new Button(“Save As“); p1.add(b1); p1.add(b2); p1.add(b3); b2.setEnabled(false); b3.setEnabled(false); b1.addActionListener(this); //注冊(cè)按鈕的事件監(jiān)聽(tīng)程序 b2.addActionListener(this); b3.addActionListener(this); f.add(p1,“South“); f.setVisible(true); } public void textValueChanged(TextEvent e) { //實(shí)現(xiàn)TextListener接口中的方法,對(duì)文本區(qū)操作時(shí)觸發(fā) b2.setEnabled(true); b3.setEnabled(true); },綜合案例(續(xù)),public void actionPerformed(ActionEvent e){ if (e.getSource()==b1) { //單擊[打開(kāi)]按鈕時(shí) fd = new FileDialog(f,“Open“,FileDialog.LOAD); fd.setVisible(true); //創(chuàng)建并顯示打開(kāi)文件對(duì)話框 if ((fd.getDirectory()!=null) } } },綜合案例(續(xù)),if ((e.getSource()==b2)||(e.getSource()==b3)) { //單擊[保存]按鈕時(shí) if((e.getSource()==b3)||(e.getSource()==b2) } },綜合案例(續(xù)),else save(file1); } } public void save(File file1){ try {//將文本區(qū)內(nèi)容寫(xiě)入字符輸出流 FileWriter fw = new FileWriter(file1); fw.write(ta1.getText()); fw.close(); b2.setEnabled(false); b3.setEnabled(false); } catch (IOException ioe){ System.out.println(ioe); } } public void windowClosing(WindowEvent e){ System.exit(0); } },綜合案例(續(xù)),程序運(yùn)行結(jié)果,簡(jiǎn)答練習(xí)題,利用輸入輸出流編寫(xiě)程序,實(shí)現(xiàn)文件拷貝的功能。,編寫(xiě)程序,實(shí)現(xiàn)在屏幕上顯示文本文件的功能。,有哪些常用的字節(jié)流和字符流,他們的主要區(qū)別是什么?,對(duì)字節(jié)流和字符流進(jìn)行讀寫(xiě)操作的一般步驟是什么?,File類有哪些構(gòu)造方法和常用方法?,編寫(xiě)程序,從鍵盤(pán)輸入一串字符,從屏幕輸出并將其存入a.txt文件中。,【例15.1】標(biāo)準(zhǔn)輸入輸出舉例,——標(biāo)準(zhǔn)輸入輸出,輸入輸出流的分類,import java.io.*; public class IODemo {public static void main(String args[]) throws IOException {int b; int count=0; while((b=System.in.read())!=-1){count++;System.out.print((char)b);} System.out.println(); System.out.println(“program end“); } },程序運(yùn)行如下: 輸入:a,b,c,d 輸出:a,b,c,d 輸入:^Z 輸出: program end,【例15.2】對(duì)Test.txt及其上一級(jí)目錄的File類對(duì)象進(jìn)行操作,目錄和文件管理,——File類,import java.io.*; public class fileTest //創(chuàng)建一個(gè)文件 {public static void main(String args[]) {File f=new File(“parent\\fileTest.txt“); File f1=new File(“newfileTest.txt“); try{System.out.println(f.getParent()); System.out.println(f.getName()); System.out.println(f1.getPath()); System.out.println(f1.getAbsolutePath());}catch(Exception e){e.printStackTrace();} } },程序運(yùn)行結(jié)果,【例15.3】建立 test.txt 文件對(duì)象,判斷是否存在,如果不存在就創(chuàng)建之,import java.io.*; public class CreateNewFile{ public static void main(String args[]){ File f=new File(“test.txt“); try{ if(!f.exists()) f.createNewFile(); else System.out.println(“exists“); }catch(Exception e){ e.printStackTrace(); } } },程序運(yùn)行結(jié)果,目錄和文件管理,——File類,【例15.4】創(chuàng)建文件夾Dir以及文件夾dir/cdir。,目錄和文件管理,——File類,import java.io.*; public class CreateDir{ public static void main(String args[]){ File f=new File(“test.txt“); File f1=new File(“Dir“); File f2=new File(“dir/cdir“); File f3=new File(“newTest.txt“); try{ f.renameTo(f3);//把test.txt改名為newTest.txt f1.mkdir(); //創(chuàng)建目錄Dir f2.mkdirs(); //創(chuàng)建目錄dir及其子目錄cdir }catch(Exception e){e.printStackTrace();} } },程序運(yùn)行結(jié)果,【例15.5】使用File類的方法獲取文件file.txt的屬性信息,目錄和文件管理,——File類的應(yīng)用,,import java.io.*; public class file{ public static void main(String[] args){ File fl = new File(“file.txt“); System.out.println(“The file is exist? “+fl.exists()); System.out.println(“The file can write? “+fl.canWrite()); System.out.println(“The file can read? “+fl.canRead()); System.out.println(“The file is a file? “+fl.isFile()); System.out.println(“The file is a directory? “+fl.isDirectory()); System.out.println(“The file's name is: “+fl.getName()); System.out.println(“The file's all path is: “ + fl.getAbsolutePath()); System.out.println(“The file's length is “+fl.length());} },,程序運(yùn)行結(jié)果,【例15.6】列出Dir目錄下的所有文件和目錄(String list( )),最后修改時(shí)間;若為目錄則在其后面標(biāo)出,若為文件,則在其后面標(biāo)出文件長(zhǎng)度(提示:方法long lastModified()能夠返回自1970.1.1起 到最后修改時(shí)間之間的秒數(shù)),import java.io.*; import java.util.*; public class testDir{ public static void main(String args[]){ File f=new File(“Dir“); String[] listAll=null; File temp=null; try{ listAll=f.list(); for(int i=0;i\t“); else System.out.print(temp.length()+“\t“); System.out.println(new Date(temp.lastModified())); } }catch(Exception e){e.printStackTrace();} } },目錄和文件管理,——File類的應(yīng)用,程序運(yùn)行結(jié)果,字節(jié)流,【例15.7】將FileIO.java復(fù)制為FileExam.java.bak,import java.io.*; public class FileIO {public static void main(String args[]) {FileInputStream inFile=null; FileOutputStream outFile=null; try{inFile=new FileInputStream(“FileIO.java“); outFile=new FileOutputStream(“FileExam.java.bak“); int date; while((date=inFile.read())!=-1){outFile.write(date);} } catch(FileNotFoundException e){System.out.println(e.getMessage());} catch(IOException e){System.out.println(e.getMessage());} finally{if(inFile!=null){try{inFile.close();}catch(IOException e){}} if(outFile!=null){try{outFile.close();}catch(IOException e){}} } } },程序運(yùn)行結(jié)果,【解題分析】以下問(wèn)題的求解過(guò)程可分解如下: ①先打開(kāi)文件FileExam.java ②用read()將其內(nèi)容逐字節(jié)讀取出來(lái)(如果返回值為-1,則表明已到達(dá)文件尾端) ③再用write()將讀出的字節(jié)逐一寫(xiě)入另一個(gè)文件FileExam.java.bak中 ④若文件無(wú)法打開(kāi)(例如FileExam.java不存在)或無(wú)法生成(FileExam.java.bak),則拋出FileNotFoundException異常,若讀寫(xiě)出錯(cuò),則拋出IOException異常。 ⑤最后,在finally中關(guān)閉文件。,【例15.8】程序讀入文件ByteIO.java,將其內(nèi)容寫(xiě)入內(nèi)存中(一個(gè)字節(jié)數(shù)組),接著轉(zhuǎn)換為String對(duì)象,并將該String對(duì)象內(nèi)的令牌解析出來(lái),字節(jié)流,import java.io.*; import java.util.*; public class ByteIO {public static void main(String args[]) {try{File inFile=new File(“FileIO.java“); FileInputStream inData=new FileInputStream(inFile); ByteArrayOutputStream dataArray=new ByteArrayOutputStream(); int data; while((data=inData.read())!=-1){dataArray.write(data);} inData.close(); String dataStr=dataArray.toString(); StringTokenizer tokens=new StringTokenizer(dataStr); while(tokens.hasMoreTokens()){System.out.println(tokens.nextToken());} }catch(IOException e){System.out.println(e.getMessage());} } },程序運(yùn)行結(jié)果,【例15.9】文件拷貝的緩沖改進(jìn),字節(jié)流,//文件拷貝的緩沖改進(jìn) import java.io.*; public class Copy{ public static void main(String args[]){ BufferedInputStream bis=null; BufferedOutputStream bos=null; byte buf[]=new byte[100]; try{ bis=new BufferedInputStream(new FileInputStream(“test.txt“)); bos=new BufferedOutputStream(new FileOutputStream(“testcopy.txt“)); int len=0; while( true ){ len=bis.read(buf); if(len=0) break; bos.write(buf,0,len); } bos.flush();//緩沖區(qū)只有滿時(shí)才會(huì)將數(shù)據(jù)輸出到輸出流,用flush()將未滿的緩沖區(qū)中數(shù)據(jù)強(qiáng)制輸出 }catch(Exception e){e.printStackTrace();} finally{ if(bis != null) try{ bis.close(); }catch(Exception e){ e.printStackTrace(); } if(bos!= null) try{ bos.close(); }catch(Exception e){ e.printStackTrace(); } } } },程序運(yùn)行結(jié)果,【例15.10】利用InputStreamReader從鍵盤(pán)接受輸入,再將輸入的字符顯示出來(lái),字符流,import java.io.*; class inputstreamreader{ public static void main(String args[]) { try{ int character; InputStreamReader instreamread = new InputStreamReader(System.in); //InputStreamReader以字符形式讀取輸入 while ((character = instreamread.read()) != -1) { System.out.print((char) character); } } catch (IOException e) {} } System.out.print(“Bye”); },程序運(yùn)行結(jié)果如下: 輸入:a,b,c,d 輸出:a,b,c,d 輸入:1,2,3,4 輸出:1,2,3,4 輸入:^Z 輸出:Bye,【例15.11】下例中打開(kāi)一個(gè)文件file.txt(內(nèi)容為:Hello from file),將文件的內(nèi)容讀到緩沖區(qū),然后顯示數(shù)據(jù),字符流,import java.io.*; public class fileread{ public static void main(String args[]) throws Exception{ FileReader fileread = new FileReader(“file.txt“);//打開(kāi)文件 char data[] = new char[1024]; int charsread = fileread.read(data);//讀入 System.out.println(new String(data,0,charsread));//顯示 fileread.close();//關(guān)閉文件流 } },程序運(yùn)行結(jié)果,字符流,【例15.12】下例中,分別采用三種方式:逐字符地寫(xiě)數(shù)據(jù)、一次寫(xiě)入所有數(shù)據(jù)、分批寫(xiě)數(shù)據(jù),使用類FileWriter,import java.io.*; public class filewrite {public static void main(String args[]) throws Exception {char data[]={'T','h','i','s',' ','i','s',' ','a',' ','s','t','r','i','n','g',' ','o','f',' ','t','e','x','t','.'}; FileWriter filewriter1=new FileWriter(“file1.txt“); for(int loop_index=0;loop_indexdata.length;loop_index++){filewriter1.write(data[loop_index]);} FileWriter filewriter2=new FileWriter(“file2.txt“); filewriter2.write(data); FileWriter filewriter3=new FileWriter(“file3.txt“); filewriter3.write(data,5,10); filewriter1.close(); filewriter2.close(); filewriter3.close(); } },程序執(zhí)行后: file1.txt和file2.txt的內(nèi)容為:This is a string of text。 file3.txt的內(nèi)容為:is a strin。,字符流,【例15.13】從鍵盤(pán)接受輸入并回顯,import java.io.*; public class Echotest{ public static void main(String[] args) { BufferedReader in =new BufferedReader(new InputStreamReader(System.in)); String s; System.out.print(“please enter a string:“); try { while((s = in.readLine()).length() != 0) System.out.println(“輸入是:“+s); } catch(IOException e) { e.printStackTrace(); } } },程序運(yùn)行結(jié)果,字符流,【例15.14】下例演示CharArrayReader類的作用,該例從字符數(shù)組中逐個(gè)讀取字符并顯示,chararrayreader.java import java.io.*; public class chararrayreader{ public static void main(String args[]) throws IOException{ char data[] = {'T','h','i','s',' ','i','s',' ','a', ' ','s', 't','r','i','n','g',' ','o','f',' ','t','e','x','t','.'}; CharArrayReader chararrayreader = new CharArrayReader(data); int character; while((character = chararrayreader.read()) != -1) { System.out.print((char)character); } } },程序運(yùn)行結(jié)果為: This is a string of text.,文件的隨機(jī)訪問(wèn),【例15.15】把若干個(gè)32位整數(shù)寫(xiě)到一個(gè)名為test.txt的文件中,利用seek()方法,以相反的順序讀取這些數(shù)據(jù),import java.io.*; public class RandomFile{ public static void main(String args[]){ RandomAccessFile raf=null; int data[]={12,31,56,23,27,1,43,65,4,99}; try{ raf=new RandomAccessFile(“test.txt“,“rw“); for(int i=0;i=0;i--){ raf.seek(i*4); System.out.println(raf.readInt()); }catch(Exception e){e.getMessage();} finally{ if(raf!=null) try{raf.close();}catch(Exception e){e.getMessage();}} } },程序運(yùn)行結(jié)果,再 見(jiàn),謝謝你的配合!,- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
200 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 程序設(shè)計(jì) 15 輸入輸出 文件 操作 ppt 課件
鏈接地址:http://m.jqnhouse.com/p-1263380.html