2013-12-14 35 views
1

我有以下代碼:如何在不修改實際文件的情況下使用「文件」進行讀取?

import java.io.File; 
import java.io.IOException; 
import java.util.Scanner; 

public class Printer { 
    private File f; 
    private Scanner in; 

    public Printer(){ 
     try { 
      f = new File("C:\\Users\\Bob\\Desktop\\num.txt"); 
      in = new Scanner(f); 
     }catch (IOException i){ 
      System.out.println(i.getMessage()); 
     } 
    } 

    public double average(){ 
     int count = 0; 
     double total = 0; 
     while (in.hasNext()){ 
      count++; 
      total += in.nextInt(); 
     } 
     return total/count; 
    } 

    public void readFile(){ 
     while (in.hasNext()){ 
      System.out.println(in.next()); 
     } 
    } 
} 

主營:

public class Main { 
    public static void main(String[] args) { 
     Printer mine = new Printer(); 
     System.out.println(mine.average()); 
     mine.readFile(); 
    } 
} 

輸出:

5.666666666666667 注:我也期待打印出每一個字的。

如何在不修改文件的情況下從文件中讀取數據?我注意到,如果我這樣做in.nextInt();它會從文件中刪除值。此外,當我調試,我的編譯器達到while (in.hasNext()){它跳過循環。我會很感激,如果有人會告訴我一種方式來從文件中讀取而不實際修改它。我需要在我的一個分配中使用它,這些分配聲明該文件只會被使用一次,但是我想讓它更「動態」,因此可以保留該文件的原始內容以供日後使用使用。

+0

'平均()'處理整個文件;當你調用'readFile()'時,文件指針位於文件的末尾,所以沒有其他可讀的內容。如果您想再次閱讀其內容,則需要重新打開該文件。 – vanza

+0

@vanza通過重新打開你的意思是'F =新的文件( 「C:\\ \\用戶\\鮑勃桌面\\ num.txt」);'? –

+0

檢查文件內部 - 確保你真的*正在修改它。我敢肯定,你的'mine.readFile()'調用已有的文件指針指向文件的結尾 - 你不能去讀別的。 – AVP

回答

4

如何在不修改文件的情況下從文件讀取數據?我注意到,如果我在in.nextInt();它會從文件中刪除值。

您未修改該文件。您正在更改掃描儀在文件中指向的位置。

while(in.hasNext()){它跳過循環。

這意味着有上線沒有更多的話。 hasNext()檢查有問題的線上是否有另一個單詞。

讀取文件不會改變它,所以你在做什麼已經是正確的想法。

一旦您已經閱讀文件,它不知道你要再次啓動該文件。您可以從頭開始重新打開文件,但是...

您的硬件似乎暗示的是,如果需要,您可以將數據保存爲說明日期爲List<Integer>

0

你可以這樣讀文件:

try { 
     BufferedReader br = new BufferedReader(new FileReader(pathToFile)); 
     StringBuilder sb = new StringBuilder(); 
     String line = br.readLine(); 

     while (line != null) { 

      line = br.readLine(); 
     } 

    }catch(Exception e){ 
     System.out.println(e); 
     System.out.println("Error"); 
    } 
相關問題