2014-11-19 5 views
0

나는 문제가있어서 무엇을 해야할지 모릅니다. 이 메서드는 .txt 문서의 모든 텍스트를 읽어야합니다. 내 문제는 문서에 텍스트가 한 줄 이상 포함되어 있고 프로그램에서 마지막 줄만 읽었을 때입니다. 이 프로그램은 표지판에 대해 걱정할 필요가 없습니다. , : 또는 공백이 있지만 모든 문자를 읽어야합니다. 아무도 나를 도울 수 있습니까?프로그램은 .txt 파일의 마지막 줄만 읽습니다. java

예를 들어 텍스트

내 이름은 입니다 안녕하세요 (반환 올바른 결과)

이름

(만 반환 이름입니다) 안녕하세요

private Scanner x; 
String readFile(String fileName) 
{ 
    try { 
    x = new Scanner (new File(fileName + (".txt"))); 
    } 
    catch (Exception e) { 
    System.out.println("cant open file"); 
    } 
    while (x.hasNext()) { 
    read = x.next(); 
    } 
    return read; 
} 
+2

'read + = x.next(); '또는'read + = x.next() + "\ n"; '현재 String을 새로운 String으로 연결하기 때문에 여기서 중요한 것은'+ ='입니다. 순수 주체는 StringBuilder 또는 StringBuffer를 사용하는 것을 말합니다. 이는 더 적은 수의 객체를 생성하기 때문에 일반적으로 더 효율적이지만 실제로는 적은 양의 데이터에 대해서는 중요하지 않습니다. –

+0

당신의 프로그램은 모든 것을 읽고 있습니다, while 루프에서는, 그러나 당신은 모든 값을 버리고 마지막은 버립니다; 모든 줄을 문자열에 추가 할 수 있습니다 (StringBuffer 등을 사용하는 것이 바람직 함). – okaram

+0

또한 학습 대신 실제 사용을 위해 readAllBytes 또는 readAllLines – okaram

답변

4

read = x.next()을 사용하면 read 개체의 문자열은 항상 파일의 다음 줄에있는 텍스트로 바뀝니다. 대신 read += x.next() 또는 read = read.concat(x.next());을 사용하십시오.

+0

을 사용할 수 있습니다. 하지만 내가 읽은 후에 그것을 어떻게 한 줄로 바꿀 수 있는지 아십니까? read.replaceAll ("[^ a-zA-Z0-9]", ""); 작동하지 않습니다 –

+0

위의 예제 텍스트를 사용하고 있습니까 (hello my 이름이 무엇입니까?)? 'replaceAll'을 사용할 때 결과는 무엇입니까? – TNT

+0

비밀을 사용하고 있습니다. 텍스트. (int i = 0; i 텍스트 을 읽으시겠습니까? 그래서 내가 줄을 써서 문제를 해결할 수있는 임의의 문자열을 만들면 어떨까요? –

1

모든 읽기를 모두 read()으로 바꿉니다. 또한 Scannerclose()이 아닙니다. 나는 try-with-resources과 같은 것을 사용할 것입니다.

String readFile(String fileName) 
{ 
    String read = ""; 
    try (Scanner x = new Scanner (new File(fileName + (".txt")));) { 
    while (x.hasNextLine()) { 
     read += x.nextLine() + System.lineSeparator(); // <-- += 
    } 
    } catch (Exception e) { 
    System.out.println("cant open file"); 
    } 
    return read; 
} 
+0

스캐너는 자동 닫기 가능 객체입니까? – Unihedron

+0

@Unihedron ['Scanner'] (https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html)은 '닫기 가능'입니다. 그리고 * java.lang.AutoCloseable을 구현하는 모든 객체, java.io.Closeable을 구현하는 모든 객체를 포함 * –

+0

감사, TIL! 현명한 사용을 위해 upvote 겠지만, 오늘은 투표에서 벗어났습니다. – Unihedron

관련 문제