2016-05-23 6 views
0

次のコードでは、マーク(0)とリセット()メソッドを使用して、テキストファイルを上から下に5回読み取りました。私は助けてくれていません。あなたのwhileループでははるかに簡単にこれを行うことができます
BufferedReaderのコードが無効になっています

package com.narasimha; 
import java.io.*; 
import java.util.*; 
public class Attempts { 

public static void main(String args[]) { 

    int count=0; 
    BufferedReader file; 
    HashSet<String> ualist; 
    List<String> salist,ssclist,splist; 
    String ualine,saline,sscline,spline; 
    long sum=0; 
    double avg; 

    try{  
     file=new BufferedReader(new FileReader("KAR_UBONA_UBONACT15_20150929_20150930_FEEDBACK.txt")); 
     file.mark(0); 

    //1.No of Attempts 
     while(file.readLine()!=null){ 
      count++; 
     } 
      System.out.println("No of Attempts\t"+count); 
     file.reset(); 
      count=0; 
    //2. No of uniq Attempts 
      file.mark(0); 
      ualist=new HashSet<String>(); 
       while((ualine=file.readLine())!=null){ 
        String array[]=ualine.split(","); 
        ualist.add(array[0]); 
        } 
        for(String ua:ualist){ 
         count++; 
        } 
      System.out.println("No of Uniq Attempts\t"+count); 
      file.reset(); 
      count=0; 
    //3. Successful Attempts 
      file.mark(0); 
      salist=new ArrayList<String>(); 
       while((saline=file.readLine())!=null){ 
        String array[]=saline.split(","); 
         if(!(array[1].equals("0"))) 
          salist.add(array[1]); 
          sum=sum+Integer.parseInt(array[1]); 
        } 
        for(String sa:salist){ 
         count++; 
        } 
        avg=sum/count; 
      System.out.println("No of Successful Attempts\t"+count); 
      //Average Mou of Successful Calls 
      System.out.println("Avg Mou of Successful Calls\t"+avg); 
      file.reset(); 
      count=0; 
    //4.Song Selected Calls 
      file.mark(0); 
      ssclist=new ArrayList<String>(); 
       while((sscline=file.readLine())!=null){ 
        String array[]=sscline.split(","); 
         if(!(array[2].equals("\\N"))) 
          ssclist.add(array[2]); 
        } 
        for(String ssc:ssclist){ 
         count++; 
        } 
     System.out.println("No of Song Selected Calls\t"+count); 
     file.reset(); 
     count=0; 
    //5.calls where atleast one song was played 
     file.mark(0); 
      splist=new ArrayList<String>(); 
       while((spline=file.readLine())!=null){ 
        String array[]=spline.split(","); 
         if(!(array[3].equals(""))) 
          splist.add(array[3]); 
        } 
        for(String sp:splist){ 
         count++; 
        } 
     System.out.println("Songs where atleast on song was played\t"+count); 

      file.close(); 

    }catch(IOException ioe){ 
      System.out.print("Sorry! Unable to connect to the file"); 
     }  
    } 

} 
+2

働いていないとはどういう意味ですか?問題を指定してください。 – zubergu

+3

'mark(0);'は 'mark'がファイル内の' 0'の位置にあることを意味していませんか? – Kayaman

+0

正直言って、大量のバイト用に設計されていないので、_whole_ファイルの再読み込みに '#mark'と'#reset'を使うのは無意味です。新しいBufferedReaderを作成するだけです。 – Tom

答えて

0

に:

String line = null; 
while((line = file.readLine()) != null) { //this gives line the String of one line of the file 
    String[] array = line.split(","); 
    ualist = new HashSet<String>(); 
    ualist.add(array[0]); 
    salist = new ArrayList<String>(); 
    salist.add(array[1]); 
    // and so on 

次に、あなたが平均値を導出し、その上に別のメソッドを指定することができます。

1

問題は、メソッドmark(int readAheadLimit)のパラメータの意味の誤った解釈です。 javadocは、指定する数値が、マークを保持している間に読み取られる可能性のある文字の数であることを説明しています。この番号は、バッファの新しいサイズを定義します(小さい場合)。バッファはヒープにあるので、注意深く適切な状況で使用する必要があります(そして、あなたのものはそうではないようです)。

ファイルを複数回スキャンする必要がある場合は、オープン/リード/クローズサイクルを複数回実行する必要があります。

関連する問題