2014-12-23 1 views
1

텍스트 파일 (인코딩 됨)의 한 줄을 읽고 디코드하고 특정 숫자 집합이 들어 있는지 확인해야하는 bufferedReader이 있습니다. 특정 숫자 집합을 포함하는지 여부를 확인하는 부분은 괜찮습니다. 그러나 전체 파일, 아래 코드 및 파일에서 읽은 결과를 읽는 데 문제가 있습니다. 아래에 제공되는 읽기 방법과 같이내 bufferedReader는 한 줄만 읽지 않고 전체 파일을 읽습니다. 왜?

코드 :

106382076 
78, 97, 109, 101, 32, 116, 101, 115, 116, 32, 99, 97, 114, 100, 78, 111, 32, 52, 
48, 52, 54, 48, 52, 57, 51, 57, 32, 67, 117, 114, 114, 101, 110, 116, 32, 66, 9 
7, 108, 97, 110, 99, 101, 32, 51, 49, 48, 32, 111, 118, 101, 114, 100, 114, 97, 
102, 116, 32, 102, 97, 108, 115, 101, 32, 111, 118, 101, 114, 68, 114, 97, 102, 
116, 76, 105, 109, 105, 116, 32, 48, 32, 112, 105, 110, 32, 50, 50, 50, 50 
Name test cardNo 404604939 Current Balance 310 overdraft false overDraftLimit 0 
pin 2222Name account cardNo 106382076 Current Balance 132 overdraft false overDr 
aftLimit 0 pin 4444Name test cardNo 404604939 Current Balance 310 overdraft fals 
e overDraftLimit 0 pin 2222Name account cardNo 106382076 Current Balance 132 ove 
rdraft false overDraftLimit 0 pin 4444` 

이 정상적으로 출력 :

파일에서 읽은 것과

prviate static final String UTF8_BOM = "\uFEFF"; 
String cardNumberStr = "106382076"; 
String lineFromFile = null; 
lineFromFile = bufferedReaderToWrite.readLine(); 
if (lineFromFile.startsWith(UTF8_BOM)) { 
    lineFromFile = lineFromFile.substring(1); 
} 
lineFromFile = lineFromFile.substring(1, lineFromFile.length()-1); //Convert bytes read back to String 
for(String s: lineFromFile.split(", ")){ //Split every byte on , 
    sb.append((char) Integer.parseInt(s)); //Convert byte to char 
} 
String textToCheck = sb.toString(); //Convert StringBuilder to String 
System.out.println(textToCheck); 
System.out.println(); 
System.out.println(cardNumberStr); 
if(textToCheck.contains(cardNumberStr)){ 
    System.out.println(lineFromFile); 
} 

출력 118,823,210

텍스트 파일의 내용은 folows과 같습니다

[78, 97, 109, 101, 32, 116, 101, 115, 116, 32, 99, 97, 114, 100, 78, 111, 32, 49, 56, 57, 52, 57, 51, 50, 56, 52, 32, 67, 117, 114, 114, 101, 110, 116, 32, 66, 97, 108, 97, 110, 99, 101, 32, 57, 52, 32, 111, 118, 101, 114, 100, 114, 97, 102, 116, 32, 102, 97, 108, 115, 101, 32, 111, 118, 101, 114, 68, 114, 97, 102, 116, 76, 105, 109, 105, 116, 32, 48, 32, 112, 105, 110, 32, 50, 51, 50, 51] 
[78, 97, 109, 101, 32, 116, 101, 100, 116, 32, 99, 97, 114, 100, 78, 111, 32, 55, 48, 49, 55, 50, 53, 50, 51, 49, 32, 67, 117, 114, 114, 101, 110, 116, 32, 66, 97, 108, 97, 110, 99, 101, 32, 50, 54, 48, 32, 111, 118, 101, 114, 100, 114, 97, 102, 116, 32, 102, 97, 108, 115, 101, 32, 111, 118, 101, 114, 68, 114, 97, 102, 116, 76, 105, 109, 105, 116, 32, 48, 32, 112, 105, 110, 32, 50, 50, 50, 50]` 
+0

가능한 [BufferedReader로 파일의 첫 번째 줄을 읽는 방법?] (http : // stackoverflow.co.kr/questions/9431970/how-to-read-first-of-a-file-with-bufferedreader) –

+0

당신이 무엇을 1 행에 따라 파일입니까? – varun

+2

내가 맞다면 파일이 1 줄의 데이터가 아니라는 것을 확인해야합니다. 즉 줄 구분 기호 (\ r, \ n ...)가 있어야합니다. – Yazan

답변

0

You can use BufferedReader.readLine() to get the first line.

내의 readLine의 다음()에 대한 호출이 당신에게 두번째 라인을 얻을 것이다 주, 다음 3 라인 .. ..

편집 :

당신이 당신의 의견 제안과 같은 특정 라인을 지정하려면 - 당신이 사용 할 수 있습니다 Apache Commons FileUtils 및 사용 : FileUtils.readLines(). 특정 목록을 가져 오는 것을 포함하여 목록과 같이 처리 할 수있는 목록을 제공합니다. 전체 파일을 읽고 List에 해당 행을 채우므로 더 많은 오버 헤드가 있음에 유의하십시오.

+1

입니다. Java 7에는'Files.readAllLines()'가있다. – fge

0

BufferReader readLine 텍스트 줄을 읽습니다. 한 줄은 줄 바꿈 ('\ n'), 캐리지 리턴 ('\ r') 또는 캐리지 리턴 다음에 바로 줄 바꿈으로 끝나는 것으로 간주됩니다.

public static void main(String[] args) throws IOException { 
    BufferedReader bufferedReaderToWrite = new BufferedReader(
     new FileReader(new File("D:/tmp/Z_Z_DELETE_ASAP/file.txt"))); 

    while ((lineFromFile = bufferedReaderToWrite.readLine()) != null) { 
     StringBuilder sb = new StringBuilder(); 
     if (lineFromFile.startsWith(UTF8_BOM)) { 
      lineFromFile = lineFromFile.substring(1); 
     } 
     lineFromFile = lineFromFile.substring(1, lineFromFile.length() - 1); //Convert bytes read back to String 
     for (String s : lineFromFile.split(", ")) { //Split every byte on , 
      sb.append((char) Integer.parseInt(s)); //Convert byte to char 
     } 
     String textToCheck = sb.toString(); //Convert StringBuilder to String 
     System.out.println(textToCheck); 
     System.out.println(); 
     System.out.println(cardNumberStr); 
     if (textToCheck.contains(cardNumberStr)) { 
      System.out.println(lineFromFile); 
     } 
     System.out.println(); 
    } 
} 

그런 다음 출력 될 것입니다 :

Name test cardNo 189493284 Current Balance 94 overdraft false overDraftLimit 0 pin 2323 

106382076 

Name tedt cardNo 701725231 Current Balance 260 overdraft false overDraftLimit 0 pin 2222 

106382076 
1

내가 믿는 당신이 다중 라인이있을 때 하나 하나

, 각 라인을 읽기 위해이 같은 루프에 코드를 삽입한다 여기서 문제는 이 파일에을 쓸 때 줄 바꿈을 포함하는 것을 잊었을 때 ...

(또한 BOM을 어떻게 사용합니까?)

BufferedWriter을 쓸 때 한 줄을 작성한 후에 writer.newLine()을 잊어 버리지 마십시오.

Files.write()을 사용하여 줄 집합을 파일에 직접 쓰면 줄 바꿈 문자가 삽입됩니다. 마지막으로 Files.readAllLines()을 사용하면 한 줄에 모든 파일을 한 번에 읽을 수 있습니다.

Java 8의 경우 Files.lines()도 있습니다.