2012-06-24 61 views
1

我有一個簡單的Java問題,我需要一個簡單的答案,如果可能的話。我需要從文件輸入數據並將數據存儲到數組中。爲此,我必須讓程序打開數據文件,計算文件中元素的數量,關閉文件,初始化數組,重新打開文件並將數據加載到數組中。我主要是無法將文件數據存儲爲數組。下面是我有:基本文件讀取到陣列存儲

的讀取文件是在這裏:https://www.dropbox.com/s/0ylb3iloj9af7qz/scores.txt

import java.io.*; 
import java.util.*; 
import javax.swing.*; 
import java.text.*; 


public class StandardizedScore8 
{ 



//Accounting for a potential exception and exception subclasses 
public static void main(String[] args) throws IOException 
{ 
    // TODO a LOT 
    String filename; 
    int i=0; 


    Scanner scan = new Scanner(System.in); 
    System.out.println("\nEnter the file name:"); 
    filename=scan.nextLine(); 



    File file = new File(filename); 


    //File file = new File ("scores.txt"); 
    Scanner inputFile = new Scanner (file); 

    String [] fileArray = new String [filename]; 
    //Scanner inFile = new Scanner (new File ("scores.txt")); 

    //User-input 
// System.out.println("Reading from 'scores.txt'"); 
// System.out.println("\nEnter the file name:"); 
// filename=scan.nextLine(); 

    //File-naming/retrieving 
// File file = new File(filename); 
// Scanner inputFile = new Scanner(file); 

回答

1

是的,你可以,如果你不關心做兩次事情的麻煩。使用while(inputFile.hasNext()) i++;

計算元素的數量和創建磁盤陣列:

String[] scores = new String[i]; 

如果你做護理,而不是使用數組列表:

List<String> list = new ArrayList<String>(); 
while(inputFile.hasNext()) list.add(inputFile.next()); 

您可以獲取列表元素,如list.get(i),設置列表元素如list.set(i,"string"),並獲得列表的長度list.size()

順便說一下,您的String [] fileArray = new String [filename];行不正確。你需要使用一個int來創建一個數組而不是一個String。

+0

謝謝你的好榜樣! – Klinetel

2

我建議你使用的集合。這樣,您不必事先知道文件的大小,只會讀取一次,而不是兩次。該集合將管理自己的大小。

+0

我寧願不使用它們,因爲我不知道我怎麼會操縱它以後的方法。完全可以使用數組嗎? - 我需要知道文件中有多少項目? – Klinetel

+1

你絕對應該使用列表/集合。如果你不知道如何操縱它們,現在將是學習的好時機。它們非常易於使用(比數組更容易)並閱讀文檔使得學習變得容易:http://docs.oracle.com/javase/6/docs/api/java/util/List.html – jahroy

+0

謝謝,並且感謝Javadocs。 – Klinetel

1
/* 
* Do it the easy way using a List 
* 
*/ 

public static void main(String[] args) throws IOException 
{ 
    Scanner scan = new Scanner(System.in); 
    System.out.println("\nEnter the file name:"); 
    String filename = scan.nextLine(); 

    FileReader fileReader = new FileReader(filename); 
    BufferedReader reader = new BufferedReader(fileReader); 

    List<String> lineList = new ArrayList<String>(); 
    String thisLine = reader.readLine(); 

    while (thisLine != null) { 
     lineList.add(thisLine); 
     thisLine = reader.readLine(); 
    } 

    // test it 

    int i = 0; 
    for (String testLine : lineList) { 
     System.out.println("Line " + i + ": " + testLine); 
     i++; 
    } 
} 
+0

謝謝你的好例子! – Klinetel

+0

從作業標籤:*家庭作業意味着問題是要求幫助學校作業。這讓潛在的回答者知道他們應該引導學生解決問題,並且不應該簡單地顯示完整的答案。* –

+0

darn ...錯過了標籤。對於那個很抱歉。如果他們沒有在班上報名,他可能無法使用我的答案。 – jahroy