자신을 삭제하지 않고 텍스트 파일의 내용을 삭제하는 방법


89

파일 'A'의 내용을 파일 'B'에 복사하고 싶습니다. 복사가 끝나면 파일 'A'의 내용을 지우고 처음부터 쓰고 싶습니다. 다른 작업과 관련된 파일 'A'를 삭제할 수 없습니다.

Java의 파일 API (readLine ())를 사용하여 내용을 복사 할 수 있었지만 파일 내용을 지우고 파일 포인터를 파일 시작 부분으로 설정하는 방법을 모릅니다.

답변:


135

빈 문자열을 파일에 인쇄하십시오.

PrintWriter writer = new PrintWriter(file);
writer.print("");
writer.close();

14
쓰기가 필요하지 않으며 다른 작업에 파일이 열려 있으면 열기가 불가능할 수도 있습니다.
론의 후작

writer.close ??, 우리는 2017 년입니다 !!!. 또한 텍스트를 덮어 쓰므로 인쇄 ( "") 할 필요가 없습니다
FSm

1
@Andro, 타임 스탬프와 태그가 보이 시나요? 당시에는 Android 기기에서 파일을 비울 수있는 가장 안정적인 방법 이었음을 기억합니다.
Vlad

@Vlad 지금 작가를 닫을 필요가 없다면 답변을 업데이트하는 것이 좋은 생각일까요?
라인

72

파일에 빈 문자열을 쓸 필요조차 없다고 생각합니다.

PrintWriter pw = new PrintWriter("filepath.txt");
pw.close();

9
당신이 맞습니다. 쓰기를 보여주는 모든 답변이 잘못되었거나 중복됩니다.
론의 후작

33
그냥 new PrintWriter("filepath.txt").close();어때?
Supuhstar 2014

1
java docs의 인용문 "파일이 존재하면 0 크기로 잘립니다"
Pinkerton 2016 년

1
그러나 파일이 추가 모드 인 경우 수행 할 작업.
GURMEET SINGH

오, 내가 간단한 대답을 놓쳤다는 것이 믿기지 않습니다. 자르기 모드에서 파일을 엽니 다. 나는 자르기 모드가 너무 싫다.

30

RandomAccessFile 클래스에서 setLength () 메서드를 원합니다.


5
이것은 파일을 삭제하지 않기 때문에 실제로 유일한 정답입니다. 다른 모든 대답은 그렇습니다.
론의 후작

logback-android 라이브러리에서 만든 로그 파일을 지우고 싶기 때문에 이것이 필요합니다 . 로그 파일을 수동으로 삭제하면 앱을 다시 시작할 때까지 쓸 로그가 있으면 라이브러리가 다시 생성 할만큼 영리하지 못합니다. 따라서 나는이 방법을 사용하고 작업했습니다. 나는 많이 공부하지 않았습니다. 최선의 접근 방식이 아닙니까? 조언 부탁드립니다.
Yeung

재미있게도, .apk 파일에서 설치된 앱에 대해 fileOnSdCard.setLength (0)를 호출 할 때 Intenso 카드 클래스 10이 동결 (및 강제 배터리 재설정)되기 때문에 프로덕션 문제가 있습니다. 그들의 클래스 4 카드에는 문제가 나타나지 않았습니다.
Poutrathor



6

아래는 어떻습니까?

File temp = new File("<your file name>");
if (temp.exists()) {
    RandomAccessFile raf = new RandomAccessFile(temp, "rw");
    raf.setLength(0);
}

5

A에서 B로 복사 한 후 파일 A를 다시 쓰기 모드로 열고 그 안에 빈 문자열을 씁니다.


5

Java를위한 최고의 동반자 중 하나는 Apache Projects 이며 참조하십시오. 파일 관련 작업은 Commons IO 프로젝트를 참조 할 수 있습니다 .

아래 한 줄 코드는 파일을 비우는 데 도움이됩니다.

FileUtils.write(new File("/your/file/path"), "")

4

그냥 써:

FileOutputStream writer = new FileOutputStream("file.txt");

2

파일에 빈 문자열을 쓰고 플러시하고 닫습니다. 파일 작성기가 추가 모드에 있지 않은지 확인하십시오. 나는 그것이 속임수를 써야한다고 생각한다.


2

나중에 작가를 사용할 필요가 없다면 가장 짧고 깨끗한 방법은 다음과 같습니다.

new FileWriter("/path/to/your/file.txt").close();

1

사용 : 새로운 Java 7 NIO 라이브러리, 시도

        if(!Files.exists(filePath.getParent())) {
            Files.createDirectory(filePath.getParent());
        }
        if(!Files.exists(filePath)) {
            Files.createFile(filePath);
        }
        // Empty the file content
        writer = Files.newBufferedWriter(filePath);
        writer.write("");
        writer.flush();

위의 코드는 디렉토리를 생성하지 않으면 Directoty가 존재하는지 확인하고, 파일이 존재하는지 확인하고, 빈 문자열을 쓰고 버퍼를 플러시하며, 결국에는 빈 파일을 가리키는 작성자를 얻습니다


0

당신이 사용할 수있는

FileWriter fw = new FileWriter(/*your file path*/);
PrintWriter pw = new PrintWriter(fw);
pw.write("");
pw.flush(); 
pw.close();

사용하지 마십시오

FileWriter fw = new FileWriter(/*your file path*/,true);

파일 작성기 생성자에서 True는 추가를 활성화합니다.


0
FileOutputStream fos = openFileOutput("/*file name like --> one.txt*/", MODE_PRIVATE);
FileWriter fw = new FileWriter(fos.getFD());
fw.write("");

SO에 오신 것을 환영합니다! 내장 된 서식 도구를 사용하여 코드를 더 쉽게 읽을 수 있도록하십시오.
Michael L.

0

try-with-resources 작성자는 자동으로 닫힙니다.

import org.apache.commons.lang3.StringUtils;
final File file = new File("SomeFile");
try (PrintWriter writer = new PrintWriter(file))  {
    writer.print(StringUtils.EMPTY);                
}
// here we can be sure that writer will be closed automatically

0

당신이해야 할 일은 자르기 모드에서 파일을 여는 것입니다. 모든 Java 파일 출력 클래스는 자동으로이를 수행합니다.


-2

일반적인 방법을 다음과 같이 작성할 수 있습니다 (너무 늦었지만 아래 코드는 당신 / 다른 사람들을 도울 것입니다)

public static FileInputStream getFile(File fileImport) throws IOException {
      FileInputStream fileStream = null;
    try {
        PrintWriter writer = new PrintWriter(fileImport);
        writer.print(StringUtils.EMPTY);
        fileStream = new FileInputStream(fileImport);
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            writer.close();
        }
         return fileStream;
}

5
이것은 빈 파일을 생성하는 것이 아니라 하나의 null 바이트를 포함하는 파일을 생성합니다.
론의 후작
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.