从特定位置开始将文件复制到另一个文件中

时间:2016-02-25 12:51:20

标签: java java-io truncation

我有以下文件超过确定的大小,我想减少它,但我对文件的最后几行感兴趣,所以我想删除第一行,直到大小等于允许的大小,< / p>

无论如何都要在java中执行此操作吗?

1 个答案:

答案 0 :(得分:3)

试试这个:

long MAX_FILE_SIZE = 512;

try(RandomAccessFile file = new RandomAccessFile("Path to inputfile", "r"))
{
    long fileSize = file.length();

    long readStartPosition = fileSize - MAX_FILE_SIZE;
    if(readStartPosition < 0)
    {
        readStartPosition = 0;
    }

    file.seek(readStartPosition);

    try(OutputStream outputStream = new BufferedOutputStream(new FileOutputStream("Path to outputfile")))
    {
        byte[] buffer = new byte[1024];
        for(int bytesRead = file.read(buffer); bytesRead != -1; bytesRead = file.read(buffer))
        {
            outputStream.write(buffer, 0, bytesRead);
        }
    }
}
catch(Throwable t)
{
    System.out.println(t);;
}

或者,如果你想保留相同的文件:

long MAX_FILE_SIZE = 512;

try(RandomAccessFile file = new RandomAccessFile("Path to inputfile", "rw"))
{
    long fileSize = file.length();

    long readStartPosition = fileSize - MAX_FILE_SIZE;
    if(readStartPosition < 0)
    {
        return;
    }

    long writePosition = 0;
    byte[] buffer = new byte[1024];

    file.seek(readStartPosition);
    for(int bytesRead = file.read(buffer); bytesRead != -1; bytesRead = file.read(buffer))
    {
        long currentPosition = file.getFilePointer();

        file.seek(writePosition);
        file.write(buffer, 0, bytesRead);

        writePosition += bytesRead;

        file.seek(currentPosition);
    }

    long newSize = file.length() - readStartPosition;
    file.setLength(newSize);
}
catch(Throwable t)
{
    System.out.println(t);;
}

注意:这两个例子都写在我的头顶,但它们应该有效。至少你掌握了它。