วิธีลบเนื้อหาของไฟล์ข้อความโดยไม่ต้องลบเอง


90

ฉันต้องการคัดลอกเนื้อหาของไฟล์ 'A' ไปยังไฟล์ 'B' หลังจากการคัดลอกเสร็จสิ้นฉันต้องการล้างเนื้อหาของไฟล์ 'A' และต้องการเขียนตั้งแต่เริ่มต้น ฉันไม่สามารถลบไฟล์ "A" ได้เนื่องจากเกี่ยวข้องกับงานอื่น ๆ

ฉันสามารถคัดลอกเนื้อหาโดยใช้ API ไฟล์ของ java (readLine ()) แต่ไม่รู้วิธีล้างเนื้อหาของไฟล์และตั้งค่าตัวชี้ไฟล์เป็นจุดเริ่มต้นของไฟล์

คำตอบ:


136

เพียงพิมพ์สตริงว่างลงในไฟล์:

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

14
ไม่จำเป็นต้องเขียนและหากงานอื่นมีไฟล์ที่เปิดอยู่การเปิดอาจไม่สามารถทำได้
user207421

writer.close ?? เราอยู่ในปี 2560 !!!. นอกจากนี้ไม่จำเป็นต้องพิมพ์ ("") เนื่องจากข้อความจะถูกเขียนทับ
FSm

1
@ แอนโดรสังเกตการประทับเวลาและแท็ก? ในตอนนั้นฉันจำได้ว่ามันเป็นวิธีที่น่าเชื่อถือที่สุดในการล้างไฟล์ในอุปกรณ์ Android
Vlad

@ วลาดหากไม่จำเป็นต้องปิดนักเขียนตอนนี้อาจเป็นความคิดที่ดีที่จะอัปเดตคำตอบ?
สาย

73

ฉันไม่เชื่อว่าคุณต้องเขียนสตริงว่างลงในไฟล์ด้วยซ้ำ

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

9
คุณถูกต้องเกี่ยวกับเรื่องนั้น คำตอบทั้งหมดที่แสดงการเขียนผิดหรือซ้ำซ้อนที่สุด
user207421

35
แค่นั้นnew PrintWriter("filepath.txt").close();ล่ะ?
Ben Leggiero

1
quote จาก java docs "ถ้าไฟล์มีอยู่ไฟล์จะถูกตัดให้เหลือขนาดศูนย์"
Pinkerton

1
แต่จะทำอย่างไรถ้าไฟล์อยู่ในโหมดผนวก
GURMEET SINGH

โอ้ฉันไม่อยากจะเชื่อเลยว่าฉันพลาดคำตอบง่ายๆ เปิดไฟล์ในโหมดตัดทอน ฉันเกลียดโหมดตัดทอนมากจนทำให้ฉันลื่น

30

คุณต้องการเมธอด setLength () ในคลาส RandomAccessFile


5
นี่เป็นคำตอบเดียวที่ถูกต้องเนื่องจากไม่ได้ลบไฟล์ คำตอบอื่น ๆ ทั้งหมดทำได้
user207421

ฉันต้องนี้เพราะผมต้องการที่จะล้างล็อกไฟล์ที่สร้างขึ้นโดยlogback-หุ่นยนต์ห้องสมุด หากฉันลบไฟล์บันทึกด้วยตนเองไลบรารีจะไม่ฉลาดพอที่จะสร้างมันอีกครั้งหากมีบันทึกให้เขียนจนกว่าฉันจะเปิดแอปอีกครั้ง ดังนั้นฉันจึงใช้วิธีนี้และได้ผล ยังไม่ได้ศึกษาอะไรมากมาย มันเป็นแนวทางที่ดีที่สุดไม่ใช่หรือ? โปรดให้คำแนะนำ.
Yeung

สนุกดีฉันมีปัญหาในการผลิตเนื่องจากการ์ด Intenso คลาส 10 หยุดทำงาน (และบังคับให้รีเซ็ตแบตเตอรี่) เมื่อฉันเรียก fileOnSdCard.setLength (0) สำหรับแอปที่ติดตั้งจากไฟล์. apk การ์ดคลาส 4 ของพวกเขาไม่เคยแสดงปัญหา
Poutrathor

17

ง่ายๆไม่ต้องเขียนอะไร!

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

4
-1: java.lang.String ไม่ได้ toByteArray () วิธีการทั้งใน 6 หรือ 7 docs.oracle.com/javase/6/docs/api/java/lang/String
james.garriss

1
kmas

1
ที่นี่ไม่จำเป็นต้องเขียน
user207421

11

หนึ่งซับเพื่อทำการตัดทอน:

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

ดูข้อมูลเพิ่มเติมได้ที่เอกสาร Java: https://docs.oracle.com/javase/7/docs/api/java/nio/channels/FileChannel.html


+1 สำหรับการไม่สร้างอินสแตนซ์คลาสการเขียนไฟล์ทั้งหมด (และยิ่งแย่ไปกว่านั้นการเขียนมัน) นี่ควรเป็นคำตอบที่ยอมรับได้จริงๆ
Kröw

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"), "")


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 ในตัวสร้าง filewriter จะเปิดใช้งาน append


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

ยินดีต้อนรับสู่ SO! โปรดใช้เครื่องมือจัดรูปแบบในตัวเพื่อให้อ่านโค้ดของคุณได้ง่ายขึ้น
Michael L.

0

ด้วยตัวเขียนแบบลองใช้ทรัพยากรจะถูกปิดโดยอัตโนมัติ:

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
สิ่งนี้ไม่ได้สร้างไฟล์เปล่า แต่จะสร้างไฟล์ที่มีหนึ่งไบต์ว่างอยู่ในนั้น
user207421
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.