Java实现对文件的读写操作
實(shí)現(xiàn)對(duì)文件進(jìn)行讀寫
- 使用PrintWriter對(duì)文件進(jìn)行寫操作
- 使用Scanner對(duì)文件進(jìn)行讀操作
- 使用緩沖設(shè)計(jì)對(duì)文件進(jìn)行讀寫操作
使用PrintWriter對(duì)文件進(jìn)行寫操作
java.io.PrintWriter類可用來(lái)創(chuàng)建一個(gè)文件并向文件中寫入數(shù)據(jù),首先必須先為文件創(chuàng)建一個(gè)PrintWriter對(duì)象。
File file = new File("text.java"); PrintWriter put = new PrintWriter(file);調(diào)用Printwriter的構(gòu)造方法,如果文件不存在,則會(huì)在當(dāng)前目錄下創(chuàng)建一個(gè)新文件。如果文件已經(jīng)存在,那么文件中的當(dāng)前內(nèi)容將在不與用戶確認(rèn)的情況下被格式化。
注:
- 在Windows系統(tǒng)中目錄的分割符為反斜杠(\),但是在程序語(yǔ)言中反斜杠是一個(gè)特殊字符(轉(zhuǎn)義字符),因此在程序中應(yīng)寫成\\的形式。此外,也可使用斜杠(/),這樣在Windows、UNIX或其他任何系統(tǒng)上都能夠工作
- 在程序中,盡量不要直接使用絕對(duì)文件名。如果使用了像(“D:\\Users\\lenovo\\eclipse-workspace\\demo\\text.java”)
之類的文件名,那么它能在Windows上工作,但是不能在其他平臺(tái)上工作,導(dǎo)致兼容性差。推薦使用相對(duì)文件名,例如,可以使用new File(“text.java”)為當(dāng)前目錄下的文件text.java創(chuàng)建一個(gè)File對(duì)象。
此處提到的相對(duì)文件名和絕對(duì)文件名區(qū)別如下:
- 絕對(duì)文件名(absolute file name)是由文件名和它的完整路徑以及驅(qū)動(dòng)器字母組成。例如,C:\book\Welcome.java是文件Welcome.java在Windows操作系統(tǒng)上的絕對(duì)文件名。
- 相對(duì)文件名是相對(duì)于當(dāng)前工作目錄的。對(duì)于相對(duì)文件名而言,完整目錄被忽略。例如Welcome.java是一個(gè)相對(duì)文件名。如果當(dāng)前工作目錄是C:\book,絕對(duì)文件名將是C:\book\Welcome.java 。
代碼如下:
import java.io.*; import java.util.Scanner; public class TestFile {public static void main(String[] args) throws IOException{// TODO 自動(dòng)生成的方法存根Scanner in = new Scanner(System.in);File file = new File("text.java");//相對(duì)文件名if(file.exists()) {System.out.println("File already exists!");//System.exit(1);//如果存在,(正常)退出該程序}PrintWriter put = new PrintWriter(file);while(!in.hasNext("END")) {/** 執(zhí)行hasNext()時(shí),它會(huì)先掃描緩沖區(qū)中是否有字符,有則返回true,* 繼續(xù)掃描。直到掃描為空,這時(shí)并不返回false,* 而是將方法阻塞,等待你輸入內(nèi)容然后繼續(xù)掃描* 因此此處不建議使用while(in.hasNext())*/String str = in.nextLine();put.println("Good morning!"); //寫入內(nèi)容的同時(shí)換行put.println(str);}/*PrintWriter put = new PrintWriter(file);若文件存在則直接寫入(文件內(nèi)容將在不與用戶確認(rèn)的情況下被丟棄)若文件不存在則在當(dāng)前目錄下(eclipse-workspace\demo)創(chuàng)建新文件(text.java)*/in.close();put.close();System.out.println("文件絕對(duì)路徑名:"+file.getAbsolutePath());} }
調(diào)用PrintWriter的構(gòu)造方法時(shí)可能會(huì)拋出一個(gè)I/O異常,Java強(qiáng)制要求編寫代碼來(lái)處理這類異常(即使用try{}catch{}來(lái)檢測(cè)處理異常),但此處為簡(jiǎn)單起見(jiàn)只需在方法頭聲明throws IOException。
使用Scanner對(duì)文件進(jìn)行讀操作
Java.util.Scanner類用于從控制臺(tái)讀取字符串和基本類型值。為了從文件中讀取內(nèi)容,需為文件創(chuàng)建一個(gè)Scanner,如下:
File file = new File("text.java"); Scanner input = new Scanner(file);完整代碼如下:
//讀文件:File file = new File("text.java");//相對(duì)文件名Scanner input = new Scanner(file);while(input.hasNext()) {String s = input.nextLine();System.out.println(s);}input.close();結(jié)果如下:
使用緩沖設(shè)計(jì)對(duì)文件進(jìn)行讀寫操作
完整代碼如下:
import java.io.*; import java.util.Scanner;public class Mod8_Mod9 { public static void main(String args[]) { try { Scanner in = new Scanner(System.in);File file = new File("text.txt");BufferedWriter out = new BufferedWriter(new FileWriter(file));//FileWriter()向文件寫入數(shù)據(jù)//out為字符緩沖輸出流對(duì)象System.out.println("輸入內(nèi)容:");while(!in.hasNext("END")) {/** 執(zhí)行hasNext()時(shí),它會(huì)先掃描緩沖區(qū)中是否有字符,有則返回true,* 繼續(xù)掃描。直到掃描為空,這時(shí)并不返回false,* 而是將方法阻塞,等待你輸入內(nèi)容然后繼續(xù)掃描。*/String str = in.nextLine();//String str1 = str+"\r\n";out.write(str);out.newLine();//換行//out.flush();} //刷新緩沖流// 手動(dòng)把緩存區(qū)內(nèi)容壓入文件,否則直接調(diào)用.close()后會(huì)造成緩沖區(qū)未填滿的數(shù)據(jù)丟失in.close();out.close(); //關(guān)閉輸入流釋放內(nèi)存,同時(shí)釋放文件 } catch (Exception e) { e.printStackTrace(); }System.out.println("文件內(nèi)容為:");try{File file = new File("text.txt");FileInputStream fis = new FileInputStream(file);//實(shí)例化FileInputStream()對(duì)象,并直接傳入已打開文件的File對(duì)象InputStreamReader is = new InputStreamReader(fis);//InputStreamReader用于將字節(jié)流中的字節(jié)碼解碼成字符BufferedReader br = new BufferedReader(is);//BufferedReader類從字符輸入流中讀取文本并緩沖字符//以便有效地讀取字符、數(shù)組和行String txtLine = null; while((txtLine=br.readLine())!=null){ //按行讀取字符串System.out.println(txtLine); }br.close();System.out.println("路徑:"+file.getAbsolutePath());}catch (FileNotFoundException e1) { //異常處理System.err.println("File not found!");}catch(Exception e2){e2.printStackTrace();}} }運(yùn)行截圖:
總結(jié)
以上是生活随笔為你收集整理的Java实现对文件的读写操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: VB如何只读取字符串中的数字部分??
- 下一篇: 实时Javascript开发框架Clou