2016-09-17 2 views
0

"RandomAccessFile"을 사용하여 문자열을 쓰고 싶지만 "fio.writeBytes (file1str)"은 끝에 약간의 쓰레기를 추가합니다 문자열의 :RandomAccessFile.writeBytes()로 작성된 파일에 예기치 않은 여분의 문자가 있습니다.

BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 
    try { 
     System.out.println("Enter the D of planets: "); 
     file1str = in.readLine(); 
     fio = new RandomAccessFile(new File("file1"), "rw"); 
     fio.writeBytes(file1str); 
     System.out.println("Your enter: "); 
     for (String retval: file1str.split(",")) { 
      System.out.println(retval); 
     } 
     fio.close(); 
     System.out.println("Data saves to 'file1'!"); 
} 
    catch(FileNotFoundException e){ 
     System.out.println("File not found"); 
    } 
    catch(IOException e){ 
     System.out.println("Error1"); 
    } 


} 

enter image description here

.... 그러나 우리는 파일 열려있는 경우, 우리는 말에 10,700 추가 참조 :

내 나쁜 영어에 대한 enter image description here

죄송합니다

+0

코드가 잘 보이고, 내 환경에서 작동합니다. in.close(); 읽기 코드 –

+0

위의 코드 스 니펫은 예상대로 작동해야합니다. 이 코드 이후에 파일에 아무 것도 쓰지 않으셨습니까? 여기에 전체 수업을 게시 할 수 있습니까? – Fayaz

답변

3

mode = "rw"인 RandomAccessFile을 만들 때 설명서에 "파일이 없으면 파일을 만들려고합니다."라고 표시됩니다.

이 파일이 이미 존재하는 경우, 다음 시도는 그것을 잘라, 그것을 만들고 그것을 삭제하지된다는 것을 의미합니다, 등등

그럼, 일어나고있는 것은 어떤 이유, 당신이 이미를 가지고있다 9 개의 문자가있는 "file1"은 코드에서 처음 4 개의 문자 만 덮어 쓰는 코드입니다. ("5,10"부분)

파일을 쓰기 전에 삭제 해보십시오. 모든 것이 잘되어야합니다.

또는, RandomAccessFile을 선택하는 것이 시작하는 나쁜 생각이었다 가능성을 고려하고, 대신에 일반 텍스트는 보통 사람들이 일반적으로 사용하는 것이 일반적인 방법으로 파일 작성, new BufferedWriter(new FileWriter(file)) 사용해보십시오.

+0

@PavelS. 기여해 주셔서 감사합니다. 그러나 나는 https://docs.oracle.com/javase/7/docs/api/java/io/RandomAccessFile.html#RandomAccessFile(java.io.File,%20java.lang.String)을보고 있었고 mode 인수에 대한 "+"문자에 대한 언급을 찾지 못했습니다. 확실합니까? –

관련 문제