如何在java中删除文本文件的第一行

But*_*ode 5 java

可能重复:
在Java Java中替换文本文件的第一行 - 在文件中
查找一行并删除

我试图找到一种方法来使用java删除文本文件中的第一行文本.想用扫描仪做它...有没有一个好的方法来做到这一点而不需要tmp文件?

谢谢.

dan*_*dan 16

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

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();                                                          
}         
Run Code Online (Sandbox Code Playgroud)

请注意,如果您的程序在上述循环中间终止,则最终可能会出现重复的行或损坏的文件.


ast*_*eri 9

Scanner fileScanner = new Scanner(myFile);
fileScanner.nextLine();
Run Code Online (Sandbox Code Playgroud)

这将从文件返回第一行文本并将其丢弃,因为您不将其存储在任何位置.

要覆盖现有文件:

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();
Run Code Online (Sandbox Code Playgroud)

请注意,您必须以IOException这种方式捕捉和处理某些内容.此外,if()... else()...语句在while()循环中是必要的,以保持文本文件中存在任何换行符.