3 votes

Remplir une liste de tableaux à partir d'un fichier texte et supprimer le forwardSlash dans la sortie souhaitée.

Salut les Experts SO,

Etape 1 : J'ai créé une classe DVDInfo qui a le titre, le genre, l'acteur principal avec des getters et setters respectifs comme montré dans le code ci-dessous.

Question : Je dois remplir une liste de tableaux à partir d'un fichier dvdInfo.txt qui a un "forward slash /" et la sortie désirée doit contenir la liste de tableaux sans "forward slash /".

------------------------------------
       dvdInfo.txt file
------------------------------------

Donnie Darko/sci-fi/Gyllenhall, Jake
Raiders of the Lost Ark/action/Ford, Harrison
2001/sc-fi/??
Caddy Shack/comedy/Murray, Bill
Star Wars/sc-fi/Ford, Harrison
Lost in Translation/comedy/Murray, Bill
Patriot Games/action/Ford, Harrison

-------------------------------------    

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

    class DVDInfo{
      private String title;
      private String genre;
      private String leadActor;

    DVDInfo(String t,String g,String a){
       this.title = t;
       this.genre =g;
       this.leadActor=a;
   }

   public String getTitle() {
     return title;
   }

   public void setTitle(String title) {
     this.title = title;
   }

   public String getGenre() {
      return genre;
   }

   public void setGenre(String genre) {
      this.genre = genre;
   }

   public String getLeadActor() {
    return leadActor;
   }

   public void setLeadActor(String leadActor) {
     this.leadActor = leadActor;
   }

   @Override
   public String toString() {
     return "DVDInfo [title=" + title + ", genre=" + genre + ", leadActor="
            + leadActor + "]";
   }

}

public class TestDVD {
    /*
     * //access dvdInfo.txt file and populate the arrayList by removing forward slash.
     */
    public static void populateList() throws Exception {      
      BufferedReader br = new BufferedReader(new FileReader(new File("C:\\src\\dvdInfo.txt")));
      //read each line of dvdInfo.txt below
      String line=br.readLine();
      while(line !=null) {
          DVDInfo = new DVDInfo(t,g,a);
          // Step 1.Wanted to create a DVDInfo Instance for each line of data we read in from dvdInfo.txt file.//failed to do so
          // Step 2.for each DVDInfo Instance ,we need to parse the line of data and populate DVDInfo's 3 instance variables --no clue.
          // Step 3.Finally put all DVDInfo instances into the ArrayList--- i dont know how to proceed(no clue)       
      } 
    }

    public static void main(String[] args) {
        ArrayList<DVDInfo>  dvdList= new ArrayList<DVDInfo>();
        try{
            populateList();
        }catch(Exception e){
            System.out.println("Exception caught"+e.getMessage());
        }
        System.out.println(dvdList);
    }

}

  ------------------------------------------------------
  output of populateList should be without forward slash
  ------------------------------------------------------    

  Donnie Darko sci-fi Gyllenhall, Jake
  Raiders of the Lost Ark action Ford, Harrison
  2001 sc-fi ??
  Caddy Shack comedy Murray, Bill
  Star Wars sc-fi Ford, Harrison
  Lost in Translation comedy Murray, Bill
  Patriot Games action Ford, Harrison

S'il vous plaît aidez-moi avec le code de la méthode PopulateList en java version 1.5, je suis coincé avec cela.

Merci à tous, ça a marché ! !! bravo à tous les SO Experts.

5voto

Kevin Bowersox Points 48223

populateList()

//Signature of method changed to add List<DVDInfo> as a parameter    

    public static void populateList(List<DVDInfo> info) throws Exception {
            BufferedReader br = new BufferedReader(new FileReader(new File("C:\\src\\dvdInfo.txt")));
            //read each line of dvdInfo.txt below
             String line = null;
             while ((line = br.readLine()) != null) { //check line in loop
                String[] tokens = line.split("/");
                DVDInfo infoItem = new DVDInfo(tokens[0],tokens[1],tokens[2]);
                info.add(infoItem);      
            } 
          }

main()

//dvdList is now passed to the method.
public static void main(String[] args) {
    ArrayList<DVDInfo>  dvdList= new ArrayList<DVDInfo>();
    try{
        populateList(dvdList);
    }catch(Exception e){
        System.out.println("Exception caught"+e.getMessage());
    }
    System.out.println(dvdList);
}

Problème de boucle infinie

Cette section du code va provoquer une boucle infinie.

      String line=br.readLine();
      while(line !=null) {
          DVDInfo = new DVDInfo(t,g,a);

      } 

Cela est dû au fait qu'une ligne est lue dans le tampon et qu'une boucle est ensuite exécutée tant que cette ligne n'est pas nulle. Comme une nouvelle ligne n'est jamais lue dans le tampon, la ligne ne sera jamais nulle, ce qui crée une boucle infinie. Ce problème peut être résolu en utilisant :

            String line = null;
            while ((line = br.readLine()) != null) { //check line in loop

            } 

Cette construction de boucle assigne la ligne du tampon à `Strin'.

2voto

Sudhanshu Umalkar Points 3660

Divisez la ligne sur / et vous devriez obtenir les valeurs souhaitées. Essayez line.split("/") ;

2voto

Lakshmi Points 929

Vous devez remplir les données et renvoyer la liste à votre fonction principale :

 public static ArrayList<DVDInfo> populateList() throws Exception { 
         ArrayList<DVDInfo>  dvdList= new ArrayList<DVDInfo>();     
              BufferedReader br = new BufferedReader(new FileReader(new File("C:\\src\\dvdInfo.txt")));
              //read each line of dvdInfo.txt below
              String line=br.readLine();

            while (( String line = br.readLine()) != null) {
                //for each line use 
                String[] tokens = line.split("/");
                DVDInfo dvdInfo = new DVDInfo(tokens[0],tokens[1],tokens[2]); //step 1 & 2
                dvdList.add(dvdInfo );//step 3
            } 
          return dvdList;
       }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X