2016-07-01 4 views
0

폴더의 SD 카드에서 텍스트 파일을 가져 와서 텍스트 뷰에 을 표시해야합니다. 나는For 루프로 문제가 발생했습니다.

if(file!=null){ 
      File list[] = file.listFiles(); 

      Log.d("file size>>",""+file.length()); 

      if(list!=null){ 
       for(int i=0; i< list.length; i++) 
       { 
        Log.d(">>>>",""+list[i].getName()); 
        if(list[i].isFile() && list[i].getName().endsWith(".txt")) { 
         myList.add(list[i]); 

         Log.d("myList size>>",""+myList.size()); 

         try { 
          FileInputStream fIn = new FileInputStream(list[i]); 

          BufferedReader myReader = new BufferedReader(new InputStreamReader(fIn)); 

          while ((aDataRow = myReader.readLine()) != null) { 
           aBuffer += aDataRow + "\n"; 

          } 
          abc = aBuffer; 

          Log.d("log valuee>>",abc); 

         } catch (FileNotFoundException e) { 
          e.printStackTrace(); 
         } catch (IOException e) { 
          e.printStackTrace(); 
         } 
        } 
       } 
      } 
     } 

ABC 나는 각 파일의 값을 저장하고있는 문자열 변수이 코드를 사용하고 있지만, 반복적 인 데이터마다 루프 실행을 인쇄합니다. 다른 로그가 정확한 데이터를 인쇄하고 있습니다.

+0

제안 사항 – Devraj

+1

'aBuffer'는 어디에서 왔습니까? 그것은 당신이 iterations 사이에 그것을 지우지 않을 수 있습니다 것 같습니다. – vijoc

답변

0

abcaBuffer이 삭제되지 않습니다.

그래서 루프가 실행될 때마다 추가됩니다. 첫 번째 파일은 "빠른 갈색 여우"를 포함하고 두 번째가 포함되어있는 경우 예를 들어

는 "이상 점프", 세 번째는 "게으른 개", 당신이 얻을 것이다를 포함

빠른에게
가 빠른 갈색 여우가

,174의

대신 게으른 개 점프 위에 갈색 여우
는 빠른 갈색 여우 점프



게으른 개

솔루션을 통해 점프 빠른 갈색 여우는 단순히 다시 사용하기 전에 abc=""을 설정하는 것입니다.
또는 계속 하시려는 의도에 따라 aBuffer = "" 일 수 있습니다.

주석에서 @qbeck이 지적한 것처럼 String 대신 StringBuilder 또는 StringBuffer을 사용할 수 있습니다. 버퍼에는 전체 파일이 포함될 것이므로 성능에 영향을 줄 수 있습니다.

+3

또는'aBuffer + = aDataRow'에서'String' 대신에 'StringBuilder' (또는 동시성에 신경 쓰면'StringBuffer')를 사용하여 각 줄마다'String'을 불필요하게 만드는 것을 피하고 각 반복문의 시작 부분에서 지울 수 있습니다. – Luke

+0

@qbeck 좋은 지적, 고마워! 그 대답에 추가했습니다. –

+1

고마워요, 효과가있었습니다. :) – Devraj