이것이 Java에서 파일의 내용을 다시 작성하는 가장 좋은 방법입니까?

StackOverflow https://stackoverflow.com/questions/1016278

  •  06-07-2019
  •  | 
  •  

문제

파일의 내용을 다시 작성하고 싶습니다.

내가 지금까지 생각한 것은 다음과 같습니다.

  1. 파일 이름을 저장합니다
  2. 기존 파일을 삭제합니다
  3. 동일한 이름의 새 빈 파일을 만듭니다
  4. 원하는 컨텐츠를 빈 파일에 작성하십시오

이것이 가장 좋은 방법입니까? 아니면 더 직접적인 방법, 즉 파일을 삭제하고 만들 필요가 없지만 단순히 콘텐츠를 변경합니까?

도움이 되었습니까?

해결책

FileOutputStream으로 foo.log를 덮어 쓰기 위해 :

File myFoo = new File("foo.log");
FileOutputStream fooStream = new FileOutputStream(myFoo, false); // true to append
                                                                 // false to overwrite.
byte[] myBytes = "New Contents\n".getBytes(); 
fooStream.write(myBytes);
fooStream.close();

또는 filewriter와 함께 :

File myFoo = new File("foo.log");
FileWriter fooWriter = new FileWriter(myFoo, false); // true to append
                                                     // false to overwrite.
fooWriter.write("New Contents\n");
fooWriter.close();

다른 팁

이를 위해 Apache Common의 FileUtil을 사용하는 것이 좋습니다. 이 패키지가 귀중한 것을 발견했습니다. 사용하기 쉽고 똑같이 중요합니다. 잠시 후에 돌아갈 때 읽거나 이해하기 쉽습니다.

//Create some files here
File sourceFile = new File("pathToYourFile");
File fileToCopy = new File("copyPath");

//Sample content
org.apache.commons.io.FileUtils.writeStringToFile(sourceFile, "Sample content");

//Now copy from source to copy, the delete source.
org.apache.commons.io.FileUtils.copyFile(sourceFile, fileToCopy);
org.apache.commons.io.FileUtils.deleteQuietly(sourceFile);

자세한 내용은 다음에서 찾을 수 있습니다.http://commons.apache.org/io/api-release/org/apache/commons/io/fileutils.html

보다: java.io.randomaccessfile

파일을 쓸 수있는 파일을 열고 싶을 것입니다.

RandomAccessFile raf = new RandomAccessFile("filename.txt", "rw");
String tmp;
while (tmp = raf.readLine() != null) {
    // Store String data
}
// do some string conversion
raf.seek(0);
raf.writeChars("newString");

결국 콘텐츠를 추가하지 않는 한 그렇게하는 것이 합리적입니다. 당신이 추가된다면, 시도하십시오 filewriter 부록 생성자와 함께.

약간 더 나은 순서는 다음과 같습니다.

  1. 새 파일 이름 생성 (예 : foo.txt.new)
  2. 새 파일에 업데이트 된 콘텐츠를 작성하십시오.
  3. foo.txt.new에서 foo.txt에서 Atomic Rename을 수행하십시오

불행히도 Renameto는입니다 보장되지 않습니다 원자 이름을 변경합니다.

아래 예제에서 "false"는 파일을 덮어 쓰고, True는 반대를 유발합니다.

File file=new File("C:\Path\to\file.txt");
DataOutputStream outstream= new DataOutputStream(new FileOutputStream(file,false));
String body = "new content";
outstream.write(body.getBytes());
outstream.close(); 

os 공간의 추가 비용을 필요에 따라 방지하기 위해 거대한 빈 파일을 유지하고 싶을 때가 있습니다. 이것은 일반적으로 데이터베이스, 가상 머신 및 대량 데이터를 처리하고 작성하는 배치 프로그램에서 수행됩니다. 이것은 응용 프로그램의 성능을 크게 향상시킬 것입니다. 이 경우 새 파일을 작성하고 이름을 바꾸는 것은 실제로 도움이되지 않습니다. 대신 빈 파일을 채워야합니다. 그때는 오버라이드 모드로 가야 할 때입니다.

구아바 file.write "바이트 배열의 내용으로 파일을 덮어 씁니다":

Files.write(bytes, new File(path));
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top