2014-03-04 53 views
3

我想從包含100,000個雙打的文件讀取雙精度,排列成兩個雙精度線,每個用空格分隔。就像這樣:如何從.txt文件讀取雙精度到一個ArrayList

2.54343 5.67478 
1.23414 5.43245 
7.64748 4.25536 
... 

到目前爲止我的代碼:此代碼運行

Scanner numFile = new Scanner(new File("input100K.txt").getAbsolutePath()); 
ArrayList<Double> list = new ArrayList<Double>(); 
while (numFile.hasNextLine()) { 
    String line = numFile.nextLine(); 
    Scanner sc = new Scanner(line); 
    sc.useDelimiter(" "); 
    while(sc.hasNextDouble()) { 
     list.add(sc.nextDouble()); 
    } 
    sc.close(); 
} 
numFile.close(); 
System.out.println(list); 
} 

後,它打印到控制檯和空的ArrayList [],我想不通爲什麼。

從文件中刪除getAbsolutePath()給了我這一行:

Scanner numFile = new Scanner(new File("input100K.txt")); 

但是當我運行程序時,它給我一個FileNotFoundException異常。我知道該文件存在,我可以看到並打開它。

input100K.txt與程序一起位於src包文件夾中。有沒有特定的地方文件必須爲此工作?

編輯:作爲葉夫根尼·Dorofeev指出,該文件需要在程序找到它的項目文件夾(src文件夾的母公司)。

+3

看起來像你沒有找到預期的文件。嘗試將文件的絕對路徑或打印出來,然後再閱讀它以檢查它是否存在。 –

+0

我肯定會在開始時添加一個檢查以確保文件存在並且可讀,它可能非常像@LuiggiMendoza所說的那樣,它沒有找到該文件。 – Taegost

回答

4

當您創建像這樣的掃描儀new Scanner(new File("input100K.txt").getAbsolutePath());您正在掃描文件路徑作爲輸入而不是文件本身。這樣做new Scanner(new File("input100K.txt"));

+0

這樣做,我現在得到一個'FileNotFoundException'。有沒有一個特定的地方,該文件應該在我的電腦上?現在,它在我的src包文件夾中,也包含該程序。 – Kestrel

+1

嘗試將其放置在項目文件夾 –

+0

這就是問題所在。謝謝。 – Kestrel

0

你可以嘗試使用split()方法剛剛讀取的行,然後解析每個部分到double。請注意,這不是必要建立兩個Scanner S:

Scanner sc = new Scanner(new File("input100K.txt")); 
sc.useDelimiter(" "); 
ArrayList<Double> list = new ArrayList<Double>(); 

while (sc.hasNextLine()) { 
    String[] parts = sc.nextLine().split(" "); // split each line by " " 
    for (String s : parts) { 
     list.add(Double.parseDouble(s)); // parse to double 
    } 
} 
sc.close(); 

System.out.println(list); 
0

更換線

Scanner numFile = new Scanner(new File("input100K.txt").getAbsolutePath()); 

Scanner numFile = new Scanner(new File("input100K.txt")); 
0

下面是一個簡單的程序:

public static void main(String[] args) throws FileNotFoundException { 

     List<Double> doubleList = new ArrayList<Double>(); 
     Scanner scanner = new Scanner(new File("/home/visruthcv/inputfile.txt")); 
     while (scanner.hasNextDouble()) { 

      double value = scanner.nextDouble(); 

      System.out.println(value); 

      doubleList.add(value); 

     } 
     /* 
     * for test print 
     */ 
     for (Double eachValue : doubleList) { 
      System.out.println(eachValue); 
     } 

    }