新聞中心
學(xué)習(xí) Java 如何外理數(shù)據(jù)的讀與寫(xiě)。

專注于為中小企業(yè)提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)秭歸免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
當(dāng)你寫(xiě)一個(gè)程序時(shí),你的應(yīng)用程序可能需要讀取和寫(xiě)入存儲(chǔ)在用戶計(jì)算機(jī)上的文件。這在你想加載或存儲(chǔ)配置選項(xiàng),你需要?jiǎng)?chuàng)建日志文件,或你的用戶想要保存工作以待后用的情況下是很常見(jiàn)的。每種語(yǔ)言處理這項(xiàng)任務(wù)的方式都有所不同。本文演示了如何用 Java 處理數(shù)據(jù)文件。
安裝 Java
不管你的計(jì)算機(jī)是什么平臺(tái),你都可以從 AdoptOpenJDK 安裝 Java。這個(gè)網(wǎng)站提供安全和開(kāi)源的 Java 構(gòu)建。在 Linux 上,你的軟件庫(kù)中也可能找到 AdoptOpenJDK 的構(gòu)建。
我建議你使用最新的長(zhǎng)期支持(LTS)版本。最新的非 LTS 版本對(duì)希望嘗試最新 Java 功能的開(kāi)發(fā)者來(lái)說(shuō)是最好的,但它很可能超過(guò)大多數(shù)用戶所安裝的版本 —— 要么是系統(tǒng)上默認(rèn)安裝的,要么是以前為其他 Java 應(yīng)用安裝的。使用 LTS 版本可以確保你與大多數(shù)用戶所安裝的版本保持一致。
一旦你安裝好了 Java,就可以打開(kāi)你最喜歡的文本編輯器并準(zhǔn)備開(kāi)始寫(xiě)代碼了。你可能還想要研究一下 Java 集成開(kāi)發(fā)環(huán)境。BlueJ 是新程序員的理想選擇,而 Eclipse 和 Netbeans 對(duì)中級(jí)和有經(jīng)驗(yàn)的編碼者更友好。
利用 Java 讀取文件
Java 使用 File 類來(lái)加載文件。
這個(gè)例子創(chuàng)建了一個(gè)叫 Ingest 的類來(lái)讀取文件中數(shù)據(jù)。當(dāng)你要在 Java 中打開(kāi)一個(gè)文件時(shí),你創(chuàng)建了一個(gè) Scanner 對(duì)象,它可以逐行掃描你提供的文件。事實(shí)上,Scanner 與文本編輯器中的光標(biāo)是相同的概念,這樣你可以用 Scanner 的一些方法(如 nextLine)來(lái)控制這個(gè)“光標(biāo)”以進(jìn)行讀寫(xiě)。
- import java.io.File;
- import java.util.Scanner;
- import java.io.FileNotFoundException;
- public class Ingest {
- public static void main(String[] args) {
- try {
- File myFile = new File("example.txt");
- Scanner myScanner = new Scanner(myFile);
- while (myScanner.hasNextLine()) {
- String line = myScanner.nextLine();
- System.out.println(line);
- }
- myScanner.close();
- } catch (FileNotFoundException ex) {
- ex.printStackTrace();
- } //try
- } //main
- } //class
這段代碼首先在假設(shè)存在一個(gè)名為 example.txt 的文件的情況下創(chuàng)建了變量 myfile。如果該文件不存在,Java 就會(huì)“拋出一個(gè)異常”(如它所說(shuō)的,這意味著它在你試圖做的事情中發(fā)現(xiàn)了一個(gè)錯(cuò)誤),這個(gè)異常是被非常特定的 FileNotFoundException 類所“捕獲”。事實(shí)上,有一個(gè)專門的類來(lái)處理這個(gè)明確的錯(cuò)誤,這說(shuō)明這個(gè)錯(cuò)誤是多么常見(jiàn)。
接下來(lái),它創(chuàng)建了一個(gè) Scanner 并將文件加載到其中。我把它叫做 myScanner,以區(qū)別于它的通用類模板。接著,一個(gè) while 循環(huán)將 myScanner 逐行送入文件中,只要 存在 下一行。這就是 hasNextLine 方法的作用:它檢測(cè)“光標(biāo)”之后是否還有數(shù)據(jù)。你可以通過(guò)在文本編輯器中打開(kāi)一個(gè)文件來(lái)模擬這個(gè)過(guò)程:你的光標(biāo)從文件的第一行開(kāi)始,你可以用鍵盤(pán)控制光標(biāo)來(lái)向下掃描文件,直到你走完了所有的行。
while 循環(huán)創(chuàng)建了一個(gè)變量 line,并將文件當(dāng)前行的數(shù)據(jù)分配給它。然后將 line 的內(nèi)容打印出來(lái)以提供反饋。一個(gè)更有用的程序可能會(huì)解析每一行的內(nèi)容,從而提取它所包含的任何重要數(shù)據(jù)。
在這個(gè)過(guò)程結(jié)束時(shí),關(guān)閉 myScanner 對(duì)象。
運(yùn)行代碼
將你的代碼保存到 Ingest.java 文件(這是一個(gè) Java 慣例,將類名的首字母大寫(xiě),并以類名來(lái)命名相應(yīng)的文件)。如果你試圖運(yùn)行這個(gè)簡(jiǎn)單的應(yīng)用程序,你可能會(huì)接收到一個(gè)錯(cuò)誤信息,這是因?yàn)檫€沒(méi)有 example.txt 文件供應(yīng)用程序加載:
- $ java ./Ingest.java
- java.io.FileNotFoundException:
- example.txt (No such file or directory)
正好可以編寫(xiě)一個(gè)將數(shù)據(jù)寫(xiě)入文件的 Java 應(yīng)用程序,多么完美的時(shí)機(jī)!
利用 Java 將數(shù)據(jù)寫(xiě)入文件
無(wú)論你是存儲(chǔ)用戶使用你的應(yīng)用程序創(chuàng)建的數(shù)據(jù),還是僅僅存儲(chǔ)關(guān)于用戶在應(yīng)用程序中做了什么的元數(shù)據(jù)(例如,游戲保存或最近播放的歌曲),有很多很好的理由來(lái)存儲(chǔ)數(shù)據(jù)供以后使用。在 Java 中,這是通過(guò) FileWriter 類實(shí)現(xiàn)的,這次先打開(kāi)一個(gè)文件,向其中寫(xiě)入數(shù)據(jù),然后關(guān)閉該文件。
- import java.io.FileWriter;
- import java.io.IOException;
- public class Exgest {
- public static void main(String[] args) {
- try {
- FileWriter myFileWriter = new FileWriter("example.txt", true);
- myFileWriter.write("Hello world\n");
- myFileWriter.close();
- } catch (IOException ex) {
- System.out.println(ex);
- } // try
- } // main
- }
這個(gè)類的邏輯和流程與讀取文件類似。但它不是一個(gè) Scanner,而是以一個(gè)文件的名字為參數(shù)創(chuàng)建的一個(gè) FileWriter 對(duì)象。FileWriter 語(yǔ)句末尾的 true 標(biāo)志告訴 FileWriter 將文本 追加 到文件的末尾。要覆蓋一個(gè)文件的內(nèi)容,請(qǐng)移除 true 標(biāo)志。
- `FileWriter myFileWriter = new FileWriter("example.txt", true);`
因?yàn)槲以谙蛭募袑?xiě)入純文本,所以我在寫(xiě)入文件的數(shù)據(jù)(Hello world)的結(jié)尾處手動(dòng)添加了換行符(\n)。
試試代碼
將這段代碼保存到 Exgest.java 文件,遵循 Java 的慣例,使文件名為與類名相匹配。
既然你已經(jīng)掌握了用 Java 創(chuàng)建和讀取數(shù)據(jù)的方法,你可以按相反的順序嘗試運(yùn)行你的新應(yīng)用程序。
- $ java ./Exgest.java
- $ java ./Ingest.java
- Hello world
- $
因?yàn)槌绦蚴前褦?shù)據(jù)追加到文件末尾,所以你可以重復(fù)執(zhí)行你的應(yīng)用程序以多次寫(xiě)入數(shù)據(jù),只要你想把更多的數(shù)據(jù)添加到你的文件中。
- $ java ./Exgest.java
- $ java ./Exgest.java
- $ java ./Exgest.java
- $ java ./Ingest.java
- Hello world
- Hello world
- Hello world
- $
Java 和數(shù)據(jù)
你不會(huì)經(jīng)常向文件中寫(xiě)入原始文本;事實(shí)上,你可能會(huì)使用一個(gè)其它的類庫(kù)以寫(xiě)入特定的格式。例如,你可能使用 XML 類庫(kù)來(lái)寫(xiě)復(fù)雜的數(shù)據(jù),使用 INI 或 YAML 類庫(kù)來(lái)寫(xiě)配置文件,或者使用各種專門類庫(kù)來(lái)寫(xiě)二進(jìn)制格式,如圖像或音頻。
網(wǎng)站題目:編程基礎(chǔ):Java中的輸入和輸出
轉(zhuǎn)載源于:http://m.fisionsoft.com.cn/article/cddjggc.html


咨詢
建站咨詢
