2011-08-09 7 views
65

'A'파일의 내용을 'B'파일에 복사하고 싶습니다. 복사가 완료된 후 'A'파일의 내용을 지우고 처음부터 쓰기를 원합니다. 'A'파일은 다른 작업과 관련되어 삭제할 수 없습니다.삭제하지 않고 텍스트 파일의 내용을 삭제하는 방법

자바의 파일 API (readLine())를 사용하여 콘텐츠를 복사 할 수 있었지만 파일의 내용을 지우고 파일 포인터를 파일의 시작 부분으로 설정하는 방법을 알지 못합니다.

답변

99

그냥 파일에 빈 문자열을 인쇄 모드에서 쓰기에 다시 열려있는 파일을 B 다음 빈 문자열을 작성하는에서 복사 후 RandomAccessFile 클래스의 setLength() 메서드

+14

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

+0

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

+1

@Andro, 타임 스탬프와 태그를 확인합니까? 그 당시에는 Android 기기에서 파일을 비우는 것이 가장 믿을만한 방법이라는 것을 기억합니다. – Vlad

2

빈 문자열을 파일에 플러시하고 닫습니다. 파일 기록기가 추가 모드가 아닌지 확인하십시오. 나는 그 트릭을해야한다고 생각해.

13

간단하고 작성하지 않아도됩니다!

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

-1 : java.lang.String의도 6은도 7에서는, toByteArray() 메소드가없는 http://docs.oracle.com/javase/6/docs/api/java/lang/문자열. –

+0

오랜 시간 존재합니다. http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#getBytes() – kmas

+1

여기에 글을 쓸 필요가 없습니다. – EJP

25

당신이 원하는 :

FileOutputStream writer = new FileOutputStream("file.txt"); 
writer.write(("").getBytes()); 
writer.close(); 
+4

파일을 삭제하지 않기 때문에 실제로 이것은 유일한 정답입니다. 다른 모든 대답이 있습니다. – EJP

+0

[logback-android] (https://github.com/tony19/logback-android) 라이브러리에서 만든 로그 파일을 지우고 싶기 때문에이 파일이 필요합니다. 만약 로그 파일을 수동으로 지우면, 라이브러리가 충분히 영리하지 않아서 앱을 다시 시작할 때까지 쓸 로그가 있다면 다시 생성하십시오. 따라서이 방법을 사용하고 작업했습니다. 나는 많이 공부하지 않았다. 최선의 접근 방법이 아닙니까? 제발 조언. – Yeung

+0

.png 파일에서 설치된 응용 프로그램의 fileOnSdCard.setLength (0)을 호출하면 Intenso 카드 클래스 10 동결 (강제로 배터리 재설정)이 발생하기 때문에 funnily 문제가 있습니다. 클래스 4 카드는 그 문제를 결코 보여주지 못했습니다. – Poutrathor

-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; 
} 
+4

빈 파일을 만들지 않으며, 하나의 null 바이트가있는 파일을 만듭니다. – EJP

2

과 같은 일반적인 방법을 쓸 수 있습니다 그냥 쓰기 :

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

나는 당신도에있는 믿을 수 없어 빈 문자열을 파일에 씁니다. 자바를위한 최고의 동반자의

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

+8

당신은 그것에 대해 정확합니다. 글을 보여주는 모든 답은 잘못되었거나 부적절합니다. – EJP

+15

그냥'new PrintWriter ("filepath.txt"). close();'? – Supuhstar

+1

java docs에서 따옴표 "파일이 존재하면 0 크기로 잘립니다" – BrettG

3

하나는 Apache Projects이며,이를 참조 바랍니다. 파일 관련 작업의 경우 Commons IO 프로젝트를 참조 할 수 있습니다.

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

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

당신은

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

는 APPEND 가능합니다 filewriter 생성자에서 진정한

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

를 사용하지 않는 기억 사용할 수 있습니다.자바 문서에

FileChannel.open(Paths.get("/home/user/file/to/truncate")).truncate(0).close(); 

더 많은 정보를 사용할 수 :

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

하나 라이너 잘라 내기 작업을 할 아래에 대해 어떻게

1

당신은을 사용할 필요가없는 경우 작가 후에 가장 짧고 깨끗한 방법은 다음과 같습니다.

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

안녕하세요. 코드를 쉽게 읽을 수 있도록 {}을 (를) 사용할 수 있습니다. –

+0

안녕하세요. SO! 코드를 쉽게 읽을 수 있도록 기본 제공 서식 도구를 사용하십시오. –

관련 문제