2012-06-24 3 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

1

Мы можем использовать коллекцию ArrayList для хранения значений из файла в массив без знания размера массива перед началом работы. Вы можете получить дополнительную информацию о коллекциях ArrayList из следующих URL-адресов.

http://docs.oracle.com/javase/tutorial/collections/implementations/index.html

http://www.java-samples.com/showtutorial.php?tutorialid=234

+0

Большое спасибо, хотя более практичные примеры были бы полезны. – Klinetel

Смежные вопросы