2008-11-12 102 views
29

我有一個文件(稱爲「number.txt」),我想讀取到Java中的數組。我該如何繼續並做到這一點?它是一個簡單的「1維」文件,包含100個數字。Java:將文件讀入數組

問題是我每次都得到一個異常。顯然它找不到它(我確信它的拼寫正確)。查看代碼示例時,它不會指定文件的整個文件路徑,只會指定文件本身的名稱。如果有必要,我會怎麼做?

此外,在讀取文件時,數組是否會自動包含文件的所有行,或者是否必須創建一個循環,將每一行復制到相應的下標i?

我聽說過BufferedReader類,它的用途是什麼,它與閱讀輸入有什麼關係?

回答

63

下面是一些示例代碼,以幫助您開始:

package com.acme; 

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 

public class FileArrayProvider { 

    public String[] readLines(String filename) throws IOException { 
     FileReader fileReader = new FileReader(filename); 
     BufferedReader bufferedReader = new BufferedReader(fileReader); 
     List<String> lines = new ArrayList<String>(); 
     String line = null; 
     while ((line = bufferedReader.readLine()) != null) { 
      lines.add(line); 
     } 
     bufferedReader.close(); 
     return lines.toArray(new String[lines.size()]); 
    } 
} 

和示例單元測試:

package com.acme; 

import java.io.IOException; 

import org.junit.Test; 

public class FileArrayProviderTest { 

    @Test 
    public void testFileArrayProvider() throws IOException { 
     FileArrayProvider fap = new FileArrayProvider(); 
     String[] lines = fap 
       .readLines("src/main/java/com/acme/FileArrayProvider.java"); 
     for (String line : lines) { 
      System.out.println(line); 
     } 
    } 
} 

希望這有助於。

+17

回到reddit與你! – toolkit 2012-10-17 17:28:14

+2

不應該將`bufferedReader.close()`封裝在try {} finally {}塊中嗎? – LukeGT 2013-04-20 04:01:24

0

您應該能夠在Java中使用正斜槓來引用文件位置。

BufferedReader類用於包裝其他讀取方法的文件讀取器,可能效率不高。有關更詳細的說明,請參見Java APIs

工具包使用BufferedReader可能是您需要的。

3

Apache Commons I/O提供了FileUtils#readLines(),對於除大文件以外的所有文件都應該是可以的:http://commons.apache.org/io/api-release/index.html。 2.1發行版包含FileUtils.lineIterator(),它適用於大型文件。 Google的Guava圖書館包含類似的實用程序。

32
import java.io.File; 

import java.nio.charset.Charset; 
import java.nio.file.Files; 
import java.nio.file.Path; 

import java.util.List; 

// ... 

Path filePath = new File("fileName").toPath(); 
Charset charset = Charset.defaultCharset();   
List<String> stringList = Files.readAllLines(filePath, charset); 
String[] stringArray = stringList.toArray(new String[]{});