2016-10-11 1 views
0

Ich habe ein Stück Code gemacht, der eine CSV-Datei mit diesen Informationen einliest. Es enthält Schüler Namen und Testnoten.File IO Help - Einlesen

Christopher Lee, 54,0

Stanley Wright, 90,5

Oliver Stewart, 75,8

Jessica Chang, 34.65

Wenn in der Datei zu lesen, der Dateiname wird vom Benutzer als Stri eingegeben ng. Der Inhalt der Datei muss gleichzeitig in zwei Arrays gespeichert werden, wobei die Namen der Schüler als Strings gespeichert werden und die Testmarken als Reelle gespeichert werden. Ich habe ein Auswahlmenü mit zwei Optionen, Display-Markierungen und Beenden. Wenn "Markierungen anzeigen" ausgewählt ist, gibt der Benutzer den Namen des Schülers ein, und das Programm lokalisiert die Indexnummer des Namens in dem Feld und dann druckt das Programm dieselbe Indexnummer, aber in dem Feld, das die Testmarkierungen enthält, und druckt so aus das entsprechende Prüfzeichen.

Ich habe den Großteil des Codes fertig, aber ich brauche Hilfe bei der Fehlerbehebung und der Fehlerbehebung der IO-Logik. Ich bin brandneu auf Datei IO. Hier Dank

ist der Code:

import java.util.*; 
import java.io.*; 

public class MarksIO 
{ 

    public static void main(String[] args) 
    { 
     Scanner sc = new Scanner(System.in); 
     String fileName; 

     fileName = sc.nextLine(); 
     boolean valid; 
     valid = false; 
     while (valid) 
     { 
      int choice = 0; 
      System.out.println("Select an Option: "); 
      System.out.println("Display Mark = 1.\nExit = 2."); 
      if (choice == 1) 
      { 
       System.out.println("Enter the name of the Student."); 
       String name; 
       name = sc.nextLine(); 
       int lines = getNumLines(fileName); 
       String[] arrayString = new String[lines]; 
       double[] arrayReal = new double[lines]; 
       readFile(arrayString, arrayReal, fileName); 
       System.out.println("Test Mark is: " + arrayReal[index]); 
      } 
      else if (choice == 2) 
      { 
       System.exit(0); 
      } 
     } 

    } 

    public static int indexCalc(String name, double[] arrayReal, 
      String[] arrayString) 
    { 
     for (int index = 0; index < arrayString.length; index++) 
     { 
      if (arrayString[index].equals(name)) 
      { 
       return index; 
      } 
     } 
    } 

    public static void readFile(String fileName, double[] arrayReal, 
      String[] arrayString) 
    { 
     FileInputStream fileStream = null; 
     InputStreamReader reader; 
     BufferedReader bufferedReader; 
     int lineNum; 
     String line; 

     try 
     { 
      fileStream = new FileInputStream(fileName); 
      reader = new InputStreamReader(fileStream); 
      bufferedReader = new BufferedReader(reader); 

      for (int i = 0; i <= arrayString.length; i++) 
      { 
       lineNum = 0; 
       line = bufferedReader.readLine(); 
       while (line != null) 
       { 
        lineNum++; 
        arrayString[i] = processString(line); 
        arrayReal[i] = processReal(line); 
       } 
      } 
      fileStream.close(); 
     } 
     catch (IOException ex) 
     { 
      if (fileStream != null) 
      { 
       try 
       { 
        fileStream.close(); 
       } 
       catch (IOException ex2) 
       { 

       } 
       System.out.println("Error in file processing: " 
         + ex.getMessage()); 
      } 

     } 

    } 

    public static String processString(String line, String[] arrayString) 
    { 
     String[] stringArray = line.split(","); 
     String string = stringArray[0]; 
     return string; 
    } 

    public static double processReal(String line, double[] arrayReal) 
    { 
     double[] realArray = line.split(","); 
     double real; 
     real = (double)(realArray[1]); 
     return real; 

    } 

    public static int getNumLines(String fileName) 
    { 
     FileInputStream fileStream; 
     InputStreamReader reader; 
     BufferedReader bufferedReader; 
     try 
     { 
      fileStream = new FileInputStream(fileName); 
      reader = new InputStreamReader(fileStream); 
      bufferedReader = new BufferedReader(reader); 
     } 
     catch (FileNotFoundException e) 
     { 
      System.out.println("Error in file processing: " + e.getMessage()); 
     } 
     int numLines; 
     numLines = 0; 
     int lineNum = 0; 
     String line = bufferedReader.readLine(); 
     while (line != null) 
     { 
      lineNum++; 
      numLines = numLines + 1; 
      line = bufferedReader.readLine(); 

     } 

    } 

} 
+2

Ihr Code wird nicht einmal kompilieren? –

+0

Sie haben einige Kompilierungsfehler wie 'double [] realArray = line.split (", ");' ('String.split (...)' gibt eine 'String []' nicht ein 'double []') und zurück 'System.out.println (... arrayReal [index]);' (Es gibt keine Variable 'index' im Bereich, in dem diese Anweisung steht). – Titus

Antwort

0

Sie Scanner-Klasse verwenden können, um diesen Job zu tun. wie

import java.io.*; 
import java.util.Scanner; 

public class ScanXan { 
    public static void main(String[] args) throws IOException { 

     Scanner s = null; 

     try { 
      s = new Scanner(new BufferedReader(new FileReader("xanadu.txt"))); 

      while (s.hasNext()) { 
       System.out.println(s.next()); 
      } 
     } finally { 
      if (s != null) { 
       s.close(); 
      } 
     } 
    } 
}