2014-11-18 1 views
0

파일을 읽는 두 가지 방법이 있지만 텍스트 변환으로 진행하는 방법을 모르겠습니다. 문자열 및 다음 경우 다음 문 같은 ...java를 사용하여 파일을 읽고, trim 명령을 삽입하고, 문자열을 편집 한 다음 파일을 출력으로 저장하는 데 도움이 필요합니다.

if string contains ":"              
    true string = "string" 
    false string = ,,"string" 

package test; 

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileReader; 
import java.io.IOException; 

public class ReadStringFromFileLineByLine { 

    public static void main(String[] args) { 
     try { 
      File file = new File("foo.txt"); 
      FileReader fileReader = new FileReader(file); 
      BufferedReader bufferedReader = new BufferedReader(fileReader); 
      StringBuffer stringBuffer = new StringBuffer(); 
      String line; 
     String trim; 
      while ((line = bufferedReader.readLine()) != null) { 
       stringBuffer.append(line); 
       stringBuffer.append("\n"); 
      } 
      fileReader.close(); 
      System.out.println("Contents of file:"); 
      System.out.println(stringBuffer.toString()); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

그러나 나는 트림 명령을 사용하고 믿지 않는 적절

+0

보통 BufferedReader를 사용합니다. 그러나 java에 FileWriter와 같은 것이 있다는 것을 아는 것이 중요합니다. 이것이 데이터를 얻는 방법입니다. – DejaVuSansMono

+0

무엇이 오류입니까? foo.txt 파일의 내용은 무엇입니까? 왜 두 예제 모두 같은 파일을 사용하지 않습니까? – hfontanez

+0

@DejaVuSansMono 아마도 'FileReader'를 의미했습니다. – hfontanez

답변

1

당신의 질문은 정말 명확하게 프로그램의 의도를 전달하지 않습니다. 너 정확히 뭘 하려구? 파일이 텍스트 기반 인 경우 "문자열로 변환"이 필요하지 않습니다. 또한 "파일을 출력으로 저장"도 명확하지 않습니다. 새 파일을 저장하거나 기존 파일을 덮어 쓰거나 기존 파일을 추가 하시겠습니까? 이 모든 시나리오는 다르게 처리됩니다. 부품별로 가져 오기 :

첫 번째 점 : Scantest 클래스가 작동합니다. 프로젝트 폴더에 foo.txt 파일이 주어지면 클래스는 파일의 내용을 출력합니다.

두 번째 포인트 : 내 ReadStringFromFileLineByLine 클래스는 첫 번째 클래스와 마찬가지로 내 foo.txt과 작동합니다. 따라서 test.txt 파일에 문제가있을 수 있습니다. 이것은 아마도 테스트 (모든 조건을 동일하게 만들기)에서 가장 중요한 것입니다. 테스트 조건이 동일하지 않은 경우, 테스트는 결정적이지 않을 것입니다 (이것이 내가 귀하의 경우에 일어난 것으로 의심되는 이유입니다).

세 번째 점 : 클래스가 가져온 문자열을 수정하려고 시도하지 않았거나 파일을 수정했습니다. 파일에 쓰려면 다음을 고려해야합니다 : 추가 대 덮어 쓰기.

FileWriter fw = new FileWriter(file.getAbsoluteFile()); // overwrites contents of file 
FileWriter fw = new FileWriter(file.getAbsoluteFile(), true); // appends to file 

FileWriter 단일 인수 생성자가에 false을 통과하는 2 개의 인수를 생성자를 호출 오직 필요한 것은 간단한 boolean 값의 사용이다. 따라서 FileWriter은 추가 대신 덮어 씁니다. 이는 파일을 한 줄씩 처리 할 경우 최종적으로 파일에 마지막으로 수정 한 행만 포함 할 가능성이 있기 때문에 중요합니다. 추가를 선택하면 새 문자열이 줄 끝 부분에 추가됩니다. 그래서 이것은 좋지 않습니다. 파일을 한 줄씩 처리하고 모든 줄을 수정하고 동일한 파일에 줄을 저장하려면 가장 좋은 방법은 RandomAccessFile을 사용하는 것입니다. 이 클래스를 사용하면 주어진 오프셋에서 시작하는 'X'개의 문자 수를 쓸 수 있습니다. 이 경우이 "오프셋"은 현재 행의 "주소"입니다. 간단히 말해서, 오프셋은 이미 처리 된 문자 수와 같습니다. 따라서 첫 번째 줄의 경우 오프셋은 0이고 두 번째 줄은 첫 번째 줄의 문자 수입니다.

필요한 경우이 파일을 업데이트로 추가 할 수 있지만 코드에서 파일을 변경하려고 시도한 내용이 없습니다. 나는 너의 칭호로 가려고했다.

+0

나는 아직도 배우기 때문에 이것을 아주 잘 설명하지는 않을 것이라고 생각한다. 나는 텍스트를 잘 읽을 수 있지만 두 클래스 중 어느 것을 사용하는 것이 더 좋을지 알아 내려고합니다. 궁극적으로 목표는 앞뒤 공백을 바꾸고 if/then을 사용하여 텍스트를 편집하고 추가 된 텍스트를 저장하는 것입니다. 내가 가지고있는 문제는 내가 사용해야 할 코 몬즈를 이해하지만 어떻게 사용해야하는지 이해할 수 없다는 것입니다. – lcoats

+0

내 게시물 읽기. 대답은 거기에 있습니다. 파일을 읽는 데 사용하는 기술은 수행하려는 작업에 실제로 중요하지 않습니다. "읽기와 바꾸기"를 원한다면'RandomAccessFile'을 사용하는 것이 가장 좋습니다. 이 클래스는 특정 오프셋에서 읽기/쓰기를 시작할 수있는 옵션을 제공합니다. 간단한'FileWriter' append는'append'가 파일의 끝에 쓰고 현재 줄은 쓰지 않기 때문에 속임수를 쓰지 않을 것입니다. 다른 대안은 파일의 내용을 일부 버퍼에 유지하고 원하는대로 수정 한 다음 전체 버퍼 내용을 전체적으로 덮어 쓰는 것입니다. – hfontanez