Java实现删除txt第一行

该代码示例展示了如何在Java中使用RandomAccessFile类不依赖临时文件或加载整个文件到内存来删除文本文件的第一行。方法通过移动文件指针实现,适用于大文件操作。注意,如果程序中断,可能会导致文件损坏。
摘要由CSDN通过智能技术生成

import java.io.RandomAccessFile;
import java.util.ArrayList;

public class DeleteFirstLineForTxt {
	
	public static void main(String[] args) throws Exception{
		String path ="D://1//data.txt";
		deleteFirstLineForTxt(path);
		System.out.println("OK");
	}
	
	
	public static String deleteFirstLineForTxt(String path) throws Exception {
		long start = System.currentTimeMillis();

	    RandomAccessFile raf = new RandomAccessFile(path, "rw");          
	     //Initial write position                                             
	    long writePosition = raf.getFilePointer();                            
	    String username = raf.readLine().replace("\n", "").replace("\r", "").trim();                                                       
	    // Shift the next lines upwards.                                      
	    long readPosition = raf.getFilePointer();                             

	    byte[] buff = new byte[1024];                                         
	    int n;                                                                
	    while (-1 != (n = raf.read(buff))) {                                  
	        raf.seek(writePosition);                                          
	        raf.write(buff, 0, n);                                            
	        readPosition += n;                                                
	        writePosition += n;                                               
	        raf.seek(readPosition);                                           
	    }                                                                     
	    raf.setLength(writePosition);                                         
	    raf.close(); 
	    System.out.println("username: " + username);
	    
	    long end = System.currentTimeMillis();
	    long cost = end - start;
	    System.out.println("cost: " + cost);
	    return username;
	    
	}
	
	
}

如果您的文件很大,则可以使用以下方法在不使用临时文件或将所有内容加载到内存中的情况下执行删除.

public static void removeFirstLine(String fileName) throws IOException {  
    RandomAccessFile raf = new RandomAccessFile(fileName, "rw");          
     //Initial write position                                             
    long writePosition = raf.getFilePointer();                            
    raf.readLine();                                                       
    // Shift the next lines upwards.                                      
    long readPosition = raf.getFilePointer();                             

    byte[] buff = new byte[1024];                                         
    int n;                                                                
    while (-1 != (n = raf.read(buff))) {                                  
        raf.seek(writePosition);                                          
        raf.write(buff, 0, n);                                            
        readPosition += n;                                                
        writePosition += n;                                               
        raf.seek(readPosition);                                           
    }                                                                     
    raf.setLength(writePosition);                                         
    raf.close();                                                          
}         
请注意,如果您的程序在上述循环中间终止,则最终可能会出现重复的行或损坏的文件.

ast*_*eri  9

Scanner fileScanner = new Scanner(myFile);
fileScanner.nextLine();
这将从文件返回第一行文本并将其丢弃,因为您不将其存储在任何位置.

要覆盖现有文件:

FileWriter fileStream = new FileWriter("my/path/for/file.txt");
BufferedWriter out = new BufferedWriter(fileStream);
while(fileScanner.hasNextLine()) {
    String next = fileScanner.nextLine();
    if(next.equals("\n")) 
       out.newLine();
    else 
       out.write(next);
    out.newLine();   
}
out.close();
请注意,您必须以IOException这种方式捕捉和处理某些内容.此外,if()... else()...语句在while()循环中是必要的,以保持文本文件中存在任何换行符.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值