2016-12-02 70 views
1

我有这样的代码,它得到的平均品位,但我需要到ArrayList地狱导出为CSV文件。我该怎么做呢?如何ArrayList中导出到CVS文件

import java.util.*; 
import java.io.*; 
import java.io.PrintWriter; 
import java.text.*; 
public class hello3 { 
    public static void main(String[] args) 
    { 
    Scanner in = new Scanner(System.in); 

    System.out.printf("Please enter the name of the input file: "); 
    String input_name = in.next(); 
    System.out.printf("Please enter the name of the output CSV file: "); 
    String csv_name = in.next(); 
    System.out.printf("Please enter the name of the output pretty-print file: "); 
    String pretty_name = in.next(); 

    processGrades(input_name, csv_name, pretty_name); 
    System.out.printf("\nExiting...\n"); 
    } 
     public static void processGrades (String input_name, String csv_name, String pretty_name) 
    { 
     PrintWriter csv = null; 
     PrintWriter pretty = null; 
     String[][] data = readSpreadsheet(input_name); 

     boolean resultb = sanityCheck(data); 
     int length = data.length; 
     ArrayList<String> test_avg = new ArrayList<String>(); 
     ArrayList<String> HW_avg = new ArrayList<String>(); 
     ArrayList<String> NAME = new ArrayList<String>(); 
     ArrayList<String> ColN = new ArrayList<String>(); 
     ArrayList<String> Hell = new ArrayList<String>(); 
     for(int row = 1; row<length; row++) 
     { 
      String name = data[row][0]; 
      String name2 = data[row][1]; 
      String Name = name+" "+name2; 
      int test1 = Integer.parseInt(data[row][2]); 
      int test2 = Integer.parseInt(data[row][3]); 
      int test3 = Integer.parseInt(data[row][4]); 
      int Test = (test1+test2+test3)/3; 
      String Testav = Integer.toString(Test); 
      int hw1 = Integer.parseInt(data[row][5]); 
      int hw2 = Integer.parseInt(data[row][6]); 
      int hw3 = Integer.parseInt(data[row][7]); 
      int hw4 = Integer.parseInt(data[row][8]); 
      int hw5 = Integer.parseInt(data[row][9]); 
      int hw6 = Integer.parseInt(data[row][10]); 
      int hw7 = Integer.parseInt(data[row][11]); 
      int HW = (hw1+hw2+hw3+hw4+hw5+hw6+hw7)/7; 
      int[] trying = {Test, HW}; 
      int low = find_min(trying); 
      String grade = null; 
      if(low>=90) 
      { 
       grade ="A"; 
      } 
      if(low < 90&& low>= 80) 
      { 
      grade = "B"; 
      } 
      if(low <80&&low>=70) 
      { 
       grade ="C"; 
      } 
      if(low<70&&low>=60) 
      { 
       grade="D"; 
      } 
      if(low<60) 
      { 
       grade = "F"; 
      } 
      String Lows = Integer.toString(low); 
      String HWav = Integer.toString(HW); 
      test_avg.add(Testav); 
      HW_avg.add(HWav); 
      NAME.add(Name); 
      Hell.add(Name); 
      Hell.add(Testav); 
      Hell.add(HWav); 
      Hell.add(Lows); 
      Hell.add(grade); 

      System.out.println(Hell); 
      System.out.printf("\n"); 


     } 
    } 


     public static int find_min(int[] values) 
     { 
      int result = values[0]; 
      for(int i = 0; i<values.length; i++) 
      { 
       if(values[i]<result) 
       { 
        result = values[i]; 
       } 
      } 
      return result; 
     } 
    public static boolean sanityCheck(String[][] data) 
    { 
     if (data == null) 
       { 
        System.out.printf("Sanity check: nul data\n"); 
        return false; 
       } 
     if(data.length<3) 
     { 
      System.out.printf("Sanity check: %d rows\n",data.length); 
      return false; 
     } 
     int cols= data[0].length; 
     for(int row = 0; row<data.length; row++) 
     { 
      int current_cols = data[row].length; 
      if(current_cols!=cols) 
      { 
       System.out.printf("Sanity Check: %d columns at rows%d\n", current_cols, row); 
       return false; 
      } 
     } 

     return true; 
    } 
    public static String[][] readSpreadsheet(String filename) 
    { 
    ArrayList<String> lines = readFile(filename); 
    if (lines == null) 
    { 
     return null; 
    } 

    int rows = lines.size(); 
    String[][] result = new String[rows][]; 

    for (int i = 0; i < rows; i++) 
    { 
     String line = lines.get(i); 
     String[] values = line.split(","); 
     result[i] = values; 
    } 

    return result; 
    } 

    public static ArrayList<String> readFile(String filename) 
    { 
    File temp = new File(filename); 
    Scanner input_file; 

    try 
    { 
     input_file = new Scanner(temp); 
    } catch (Exception e) 
    { 
     System.out.printf("Failed to open file %s\n", 
       filename); 
     return null; 
    } 

    ArrayList<String> result = new ArrayList<String>(); 
    while (input_file.hasNextLine()) 
    { 
     String line = input_file.nextLine(); 
     result.add(line); 
    } 

    input_file.close(); 
    return result; 
    } 
} 

任何帮助,将不胜感激。谢谢。

////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////

+0

你的意思是CVS或CSV? – mm759

+0

CSV,对不起我的手指快要 –

回答

0

广义上说,你需要在一个循环中打开与您所需要的文件名的文件,和一个作家 - 就像这样:

File csvFile = new File(csvName); 
try (PrintWriter csvWriter = new PrintWriter(new FileWriter(csvFile));){ 
    for(String item : list){ 
    csvWriter.println(item); 
    } 
} catch (IOException e) { 
    //Handle exception 
    e.printStackTrace(); 
} 

很明显,你将不得不打印一些逗号作为需要

+0

谢谢如此多 –

+0

没有后顾之忧,随时接受答案,如果有帮助的话。 – saml