2012-11-01 22 views
2

我想從文件中讀取整數,在它們上應用一些操作並將這些整數寫入另一個文件。在Java文件I/O中的好習慣

// Input 
FileReader fr = new FileReader("test.txt"); 
BufferedReader br = new BufferedReader(fr); 
Scanner s = new Scanner(br); 

// Output 
FileWriter fw = new FileWriter("out.txt"); 
BufferedWriter bw = new BufferedWriter(fw); 
PrintWriter pw = new PrintWriter(bw); 

int i; 

while(s.hasNextInt()) 
{ 
    i = s.nextInt(); 
    pw.println(i+5); 
} 

我想問一下,將這些輸入和輸出流包裝起來是一種很好的做法嗎?
我是新來的java和互聯網,我看到很多文件中的I/O的其他方式。我想堅持一種方法,所以超出最佳方法?你不

+1

多大的文件? –

回答

1

當您使用PrintWriter寫入字符數據,printwriter有一個構造函數這需要filewriterargument真的需要BuffredWriter。並且不需要scannerreadfile您可以使用bufferedreader自己實現它。

FileReader fr = new FileReader("test.txt"); 
BufferedReader br = new BufferedReader(fr); 
while((line=br.readLine())!=null){ 
//do read operations here 
} 

FileWriter fw = new FileWriter("out.txt"); 
PrintWriter pw = new PrintWriter(fw); 
pw.println("write some data to the file") 
+0

我採取了BufferedWriter來提高效率。我包括掃描儀,所以我可以讀取整數。我不確定如何在沒有Scanner的情況下執行此操作,因爲BufferedReader只有read()或readLine()方法。 –

+0

確實,掃描儀不必簡單地讀取文件。但是,掃描器允許您至少解析令牌,並且這對於大多數應用程序是必需的 – smaccoun

1

掃描儀不需要BufferedReader。您可以將其封裝在FileReader上。

Scanner s = new Scanner(new FileReader("test.txt")); 

在使用掃描儀時,最好假設源包含各種內容。使用後關閉掃描儀很好。

while(s.hasNext()){ 

    if(s.hasNextInt()) 
     int i = s.nextInt(); 

    s.next(); 
    } 
    s.close(); 
+0

但是我在某處閱讀我們應該使用BufferedReader來提高效率。不是嗎? –

+0

它們有不同的功能。掃描儀可用於基於原始值或分隔符字符串標記輸入。 BufferedReader比FileReader有一個優點,它可以一次讀取文本行。 – clinton

1

-嗯認爲你一起逛街,到食品商場,現在你平時做什麼,從自我回升每個項目,然後轉到帳單計算器然後再次去到自我和背部到計費櫃檯.... ??或將所有物品存入購物車,然後轉到結算櫃檯。

-它類似於Java中這裏,Files處理字節,並與人物Buffer交易,所以有個字節的字符轉換,並相信我,它工作得很好,不會有任何顯着的開銷。

所以讀取文件:

File f = new File("Path"); 
FileReader fr = new FileReader(f); 
BufferedReader br = new BufferedReader(fr); 

所以寫入文件:

File f = new File("Path"); 
FileWriter fw = new FileWriter(f); 
BufferedWriter bw = new BufferedWriter(fw); 

而當你使用Scanner沒有必要使用BufferedReader

3

請記住,這些類的設計基於Decorator design pattern。一個好的做法是在finally塊中關閉java.io.Closeable的所有實例。例如:

Reader r = null; 
    Scanner s = null; 
    try { 
     r = new FileReader("test.txt"); 
     s = new Scanner(r); 
     // Do your stuff here. 
    } finally { 
     if (r != null) 
      r.close(); 
     if (s != null) 
      s.close(); 
    } 

,或者如果您正在使用Java 7或更高版本:

try (
      Reader r = new FileReader("test.txt"); 
      Scanner s = new Scanner(r) 
      ) { 
     // Do your stuff here. 
    } 
0

我經常這樣做:

String inputFileLocation = "Write it here"; 

BufferedReader br = new BufferedReader(new FileReader(new File(fileLocation))); 

while((line=br.readLine())!=null){ 
//Scanner operations here 
} 

String outputFileLocation = "Here"; 
PrintWriter pr = new PrintWriter(new FileWriter(new File(outputFileLocation)));