>

myFile.txt 라는 파일에 쓰고 싶습니다  프로그램을 열 때마다 프로그램의 이전 실행에서 해당 이름을 가진 파일이 존재하는 경우 덮어 쓰기를 원합니다. 어떻게하면 되나요? 읽은 내용 :

RandomAccessFile f = new RandomAccessFile("myFile.txt", "rw");

그러나 이것이 기존 파일을 덮어 씁니까? 문서가 그 내용을 알려주지 않습니다. 이전 파일을 완전히 삭제하는 것이 중요합니다. 현재 실행에서 파일 길이의 절반 만 덮어 쓴 경우 파일의 끝이 아직 존재하지 않게하고 싶습니다.

수정 : 테스트를 통해 "rw"가 기존 파일을 삭제하지는 않는다는 것을 알았습니다. 파일의 맨 위에 덮어 쓰기 만하고 나머지 파일은 그대로 둡니다.

필요에 맞는 대체 솔루션을 찾았습니다 :

   RandomAccessFile file = new RandomAccessFile("myFile.txt", "rw");
    file.setLength(0);
    file.write(contentBytes);

그러나 더 짧은 방법으로 할 수 있다면 좋을 것입니다.

  • 답변 # 1

    RandomAccessFile  열 때 파일을 제거하는 시작 모드가 없습니다. setLength(0) 를 호출하여 개봉 후 바로자를 수 있습니다. , 제안한 방식. 당신은 또한 FileChannel 를 얻을 수 있습니다  그리고 truncate(0) 에 전화  그것에.

    RandomAccessFile 를 사용하는 경우  오직 contentBytes 를 쓰는 것  배열, 당신은 FileOutputStream 를 사용하여 코드를 단순화 할 수 있습니다 , 파일을 열 때 파일이 잘립니다 (파일 첨부를 명시 적으로 요청하지 않는 한) :

    FileOutputStream fos = new FileOutputStream(f);
    fos.write(contentBytes);
    
    

    와이즈 비즈

    The reason I use RandomAccessFile is that is allows me to get the position of the file pointer, which I need in my application.

    에서 위치를 얻을 수 있어야합니다  이렇게 :

    FileOuputStream
    
    

    long pos = fos.getChannel().position();

  • 이전 apache - htaccess로 SEO 친화적 인 동적 PHP URL이 작동하지 않습니다
  • 다음 linux - 주어진 이름으로 단어를 대체하는 모든 파일을 재귀 적으로 검색