2017-02-28 112 views
0

我已經將數據文件導入到ArrayList中。我的問題是,雖然它打印出文件中的所有名字,但它不會給我正確的大小。相反,它只是打印出1.爲什麼.size()在這個ArrayList上不能正常工作?

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.ArrayList; 
import java.util.Scanner; 

public class TestArray { 
    public static void main (String [] args){ 
    String filePath = "C:\\Users\\Admin\\workspace\\Fund III\\src\\names.dat"; 

    Scanner sc = null; 
    try { 

     sc = new Scanner(new File (filePath)); 
    } catch (FileNotFoundException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 

    //Makes Array list 
    ArrayList<String> nameList = new ArrayList<String>(); 

    //Dumps names into array 
try{ 
    while(sc.hasNextLine()) 
    { 
     nameList.add(sc.nextLine()); 
    } 
    } 
    catch(Exception e) 
    { 
     System.out.println("Error: " + e); 
    } 
    System.out.println(nameList.size()); 
    System.out.println(nameList); 
} 
} 
+4

誰說1不是正確的尺寸?也許這份名單裏只有一件*事情。 – Makoto

+2

你的文件結構如何?所有的名字都在一行上嗎? –

+1

如果您將Linux文件加載到在Windows上運行的Java進程(反之亦然),則掃描程序可能無法正確識別「換行符」並將內容視爲單行。 – Brad

回答

0

看來您的文件只有一行。這裏是如何檢查:

while(sc.hasNextLine()) { 
    String line = sc.nextLine(); 
    nameList.add(line); 
    System.out.println("Line: '"+line+"'"); 
} 

運行您的修改程序,並觀察您的字符串周圍的單引號。如果您的輸出在一對引號內生成多行,問題在於您的輸入沒有運行程序的系統所期望的行尾標記。

+0

它只在一行上打印。有一個名單的列表,他們都看起來像這個「JOAN」。有什麼辦法可以將它們分開,以便它們是不同的元素? –

+0

@JonathanOrtiz使用'hasNext()'/ next()'而不是'hasNextLine()'''nextLine()'。 – dasblinkenlight

0

根據Scanner Java文檔...

由掃描儀所使用的默認空白分隔符通過 Character.isWhitespace認可。

您確定您瞭解該文件的內容及其創建方式(Linux/Windows)。

例如,在Linux上運行Java進程並讀取已在Windows上創建的文件時,我經常必須使用dos2unix命令來更正文件格式,否則它將無法按預期進行處理,除非將額外努力在你的java代碼中指定正確的文件編碼。

相關問題