2013-05-29 3 views
2

앱은 센서 데이터를 기록하고 .txt 파일에 데이터를 전화 SD 카드에 씁니다.Android - .txt 파일의 마지막 불완전한 줄 제거

데이터 수집 프로세스 중에는 언제든지 중지 버튼을 눌러 쓰기를 중지 할 수 있습니다. STOP 버튼을 누르면

myFile = new File("/sdcard/ResearchData/" 
          + txtData.getText() + ".txt"); 
        myFile.createNewFile(); 

        fOut = new FileOutputStream(myFile); 
        myOutWriter = new OutputStreamWriter(fOut); 
        myBufferedWriter = new BufferedWriter(myOutWriter); 
        myPrintWriter = new PrintWriter(myBufferedWriter); 

myPrintWriter.write(currentTime - startTime + " " + acceleration[0] 
        + " " + acceleration[1] + " " + acceleration[2] + "\n"); 

되면, 다음과 같은 코드가 실행되어 다음과 같이

관련 쓰기 부분이다.

myOutWriter.close(); 
fOut.close(); 

코드는 괜찮 작동하지만, 유일한 문제는 하나를 누를 수 있기 때문에 언제든지 중지하는 것이, 그래서 .txt 파일의 마지막 행은 항상 완전하지 않습니다. 데이터 분석이 필요하기 때문에 데이터를 멋진 직사각형 행렬로 만들어야합니다. 따라서 마지막 불완전한 줄을 제거해야합니다. 내가 어떻게 할 수 있니?

또는 다른 각도에서이 질문을 해결하십시오. STOP 버튼을 쓰기 과정과 동 기적으로 만들 수 있습니까? 즉, 한 라인이 완전히 기록 된 후, STOP이 체크된다.

답변

1

bool 유형의 변수가 필요합니다. 처음에는 false이고 그 값을 isStopPressed이라고합시다.

단추의 작동 중지 이벤트에서 true에 할당해야합니다.

당신이 파일을 상위 함수 안에 생성하고 onSensorChanged() 함수 안에서이 파일을 수정한다고 가정합니다.

그런 다음,이 라인

myPrintWriter.write(currentTime - startTime + " " + acceleration[0] 
        + " " + acceleration[1] + " " + acceleration[2] + "\n"); 

후이 사용자의 요구에 대한 당신에게 가장 포괄적 인 유효 기간을 제공 할 것입니다

if(isStopPressed) { 
    mSensorManager.unregisterListener([Your Sensor Listener]); 
    myOutWriter.close(); 
    fOut.close(); 
} 

, 같은 조건이 필요합니다.

+0

예, 내 가정에서 모든 가정이 유효합니다. 따라서 일단 정지 버튼을 누르면 모든 센서가 꺼져 onSensorChanged() 메서드가 호출되지 않습니다. 이렇게하면 마지막 줄의 데이터가 완전히 작성되었는지 확인할 수 있습니까? –

+0

마지막 행이 기록 된 후 센서 리스너 등록을 취소하고 파일을 닫으므로 유효합니다. – faradaj

1

isStopped과 같은 부울 플래그를 설정하여 중지 버튼이 눌러 졌음을 나타낼 수 있습니다. STOP 버튼을 누르면 isStopped 플래그를 참으로 설정하십시오. 파일 쓰기 부분에서 isStopped 플래그를 확인하십시오. 사실이라면 루프를 종료하고 파일을 닫습니다. 그렇지 않으면 코드가 파일에 행을 계속 쓸 수 있습니다.

+0

아니요. 작동하지 않습니다. 네가 한 말은 내가 한 일이다. 옳다면 작동 할 것이지만 어떻게 든 쓰기 과정은 여전히 ​​중단 될 것입니다. –

+0

'myOutWriter.flush();를 myOutWriter.close(); 앞에 추가하고 도움이되는지 볼 수 있습니까? – TactMayers

+0

아직 작동하지 않습니다 ... 한숨 ... –

관련 문제