2017-09-27 1 views
0

J'essaye d'éditer un lecteur dans mon code puis de mettre à jour les valeurs dans mon fichier CSV que j'ai créé mais je ne suis pas sûr de savoir comment écrire les nouvelles valeurs le fichier lui-même. Je sais ce que je veux faire mais je ne sais pas trop comment le faire. Je suis en train d'éditer le montant payé et d'essayer de le mettre à jour dans le fichier pour le joueur.Comment écraser un fichier CSV avec de nouvelles valeurs en Java

Voici mes classes: classe principale ici

package squashapplication; 

import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.nio.file.Files; 
import java.nio.file.Paths; 
import java.util.ArrayList; 

public class SquashMain { 

public static String MENU = "Options:\nA) Add player\nS) Show players\n G) Update Amount Paid\nX) Exit"; 
public static String FILE_NAME = "c:\\cis2232\\players.csv"; 

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

    Files.createDirectories(Paths.get("/cis2232")); 

    ArrayList<SquashPlayer> theList = new ArrayList(); 
    loadPlayers(theList); 
    String choice = ""; 
    do{ 
     System.out.println(MENU); 
     choice = FileUtility.getInput().nextLine().toUpperCase(); 

     switch(choice){ 
      case "A": 
       SquashPlayer player = new SquashPlayer(true); 
       theList.add(player); 


       BufferedWriter bw = null; 
       FileWriter fw = null; 

       try { 
        fw = new FileWriter(FILE_NAME, true); 
        bw = new BufferedWriter(fw); 
        bw.write(player.getCSV(true)); 
        System.out.println("Done"); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } finally { 
        try { 
         if (bw != null) { 
          bw.close(); 
         } 

         if (fw != null) { 
          fw.close(); 
         } 

        } catch (IOException ex) { 

         ex.printStackTrace(); 

        } 

       } 

       break; 
      case "S": 
       System.out.println("Here are the players"); 
       for (SquashPlayer SquashPlayer : theList) { 
        System.out.println(SquashPlayer); 
       } 
       break; 
      case "G": 
       System.out.println("Enter ID:"); 
       int input = FileUtility.getInput().nextInt(); 
       FileUtility.getInput().nextLine(); 
       for(SquashPlayer id:theList){ 
        if(id.getId() == input){ 
         System.out.println("Enter in new amount paid:"); 
         int newAmount = FileUtility.getInput().nextInt(); 
         FileUtility.getInput().nextLine(); 
         id.setAmountPaid(newAmount); 
        } 
       } 
      case "X": 
       System.out.println("Goodbye"); 
       break; 
      default: 
       System.out.println("Invalid option"); 
       break;  
     } 


    }while (!choice.equalsIgnoreCase("x")); 

} 
public static void loadPlayers(ArrayList squash){ 
    System.out.println("Loading players from the list!"); 
    int counter = 0; 

    try{ 
     ArrayList<String> tester = (ArrayList<String>) Files.readAllLines(Paths.get(FILE_NAME)); 
     for(String current:tester){ 
      System.out.println("Loading: "+current); 
      SquashPlayer temp = new SquashPlayer(current); 
      squash.add(temp); 
      counter++; 

     } 
    }catch(IOException ex){ 
     System.out.println("Error loading players from file."); 
     System.out.println(ex.getMessage()); 
    } 
    System.out.println("Loaded players from file: "+ counter + " players"); 
} 

}

classe SquashPlayer ici

package squashapplication; 

import java.util.Scanner; 

/** 
* 

*/ 
public class SquashPlayer { 

private static int maxRegistrationId; 
private int id; 
private String name; 
private String parentName; 
private String phoneNumber; 
private String email; 
private int amountPaid; 


public SquashPlayer() { 

} 


public SquashPlayer(boolean getFromUser){ 


    System.out.println("Enter Full Name:"); 
    this.name = FileUtility.getInput().nextLine(); 

    System.out.println("Enter Parents name:"); 
    this.parentName = FileUtility.getInput().nextLine(); 

    System.out.println("Enter phone number:"); 
    this.phoneNumber = FileUtility.getInput().nextLine(); 

    System.out.println("Enter e-mail:"); 
    this.email = FileUtility.getInput().nextLine(); 

    System.out.println("Enter amount paid:"); 
    this.amountPaid = FileUtility.getInput().nextInt(); 

    FileUtility.getInput().nextLine(); 

    this.id = ++ maxRegistrationId; 

} 
public SquashPlayer(int id, String name, int amountPaid , String phoneNumber, String parentName , String email ) { 
    this.id = id; 
    this.amountPaid = amountPaid; 
    this.name = name; 
    this.parentName = parentName; 
    this.email = email; 
    this.phoneNumber = phoneNumber; 
} 
public SquashPlayer(String[] parts) { 
    this(Integer.parseInt(parts[0]), parts[1], Integer.parseInt(parts[2]), parts[3],parts[4], parts[5]); 

    if (Integer.parseInt(parts[0]) > maxRegistrationId) { 
     maxRegistrationId = Integer.parseInt(parts[0]); 
    } 
} 
public SquashPlayer(String csvValues) { 
    this(csvValues.split(",")); 
} 

public String getCSV() { 
    return id + "," + name + "," + amountPaid + "," + phoneNumber + "," + email + "," + parentName; 
} 
public String getCSV(boolean withLineFeed){ 
    if(withLineFeed){ 
     return getCSV()+System.lineSeparator(); 
    }else{ 
     return getCSV(); 
    } 
} 


public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public String getParentName() { 
    return parentName; 
} 

public void setParentName(String parentName) { 
    this.parentName = parentName; 
} 

public String getPhoneNumber() { 
    return phoneNumber; 
} 

public void setPhoneNumber(String phoneNumber) { 
    this.phoneNumber = phoneNumber; 
} 

public String getEmail() { 
    return email; 
} 

public void setEmail(String email) { 
    this.email = email; 
} 

public int getAmountPaid() { 
    return amountPaid; 
} 

public void setAmountPaid(int amountPaid) { 
    this.amountPaid = amountPaid; 
} 

public int getId() { 
    return id; 
} 

public void setId(int id) { 
    this.id = id; 
} 



@Override 
public String toString() { 
    return "ID=" +id+ ", Name=" + name + ", email=" + email + ", Phone Number=" + phoneNumber + ", Amount Paid=" + amountPaid + ", Parent's Name: "+parentName; 
} 

}

Répondre

0

Cela pourrait aider, au lieu de fw.write, qui Je crois que À ce que vous utilisez, utilisez fw.append en ajoutant un nouveau caractère de ligne "\n" à la fin.

+0

Mais je veux écraser une entrée que j'ai déjà dans le fichier. Comme je veux modifier les informations d'un joueur, puis écraser leurs informations dans le fichier après avoir appuyé sur "G" dans l'instruction switch. – Shuckyducky