打印文件的最后K行(C++和Java实现)

如题,file.txt的内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

C++实现:

#include<iostream>
#include<fstream>
#include<string>
using namespace std;

//const unsigned int k = 5;
#define k 5

void printLastKLines(ifstream &fin){
	string line[k];
	int lines = 0;
	string tmp;
	while(getline(fin, tmp)) {
		line[lines % k] = tmp;
		lines++;
	}
	int start, cnt;
	if(lines < k) {
		start = 0;
		cnt = lines;
	} else {
		start = lines;
		cnt = k;
	}
	for(int i = 0; i < cnt; i++) {
		cout << line[(start + i) % k] <<endl;
	}
}

int main()
{
	ifstream fin("file.txt");
	printLastKLines(fin);
	fin.close();
	return 0;
}

运行结果:

16
17
18
19
20

Java实现:

package com.leetcode;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class PrintLastKLines {
	public static void main(String[] args) throws IOException {
		int k = 5;
		printLastKLine(k);
	}

	public static void printLastKLine(int k) throws IOException{
		FileReader f = new FileReader("file.txt");
		BufferedReader br = new BufferedReader(f);
		String[] line = new String[k];
		String tmp;
		int lines = 0;
		while((tmp = br.readLine()) != null){
			line[lines % k] = tmp;
			lines++;
		}
		int start, cnt;
		if(lines < k){
			start = 0;
			cnt = lines;
		} else{
			start = lines;
			cnt = k;
		}
		for(int i = 0; i < cnt; i++){
			System.out.println(line[(start + i) % k]);
		}
	}
}

运行结果:

16
17
18
19
20

注意:在Java实现中,file.txt文件需要放置在项目的根目录处。否则回报FileNotFound的异常。

时间: 2024-11-09 03:18:14

打印文件的最后K行(C++和Java实现)的相关文章

Linux 命令 - head: 打印文件的开头部分

命令格式 head [OPTION]... [FILE]... 命令参数 -c, --bytes=[-]K 显示每个文件的前 K 字节内容. -n, --lines=[-]K 显示每个文件的前 K 行内容. -q, --quiet, --silent 从不显示包含给定文件名的文件头. -v, --verbose 总是显示包含给定文件名的文件头. --help 显示帮助信息. --version 显示版本信息. 实例 a) 显示 /etc/passwd 前 5 行的内容. [[email prot

Linux 命令 - tail: 打印文件的结尾部分

命令格式 tail [OPTION]... [FILE]... 命令参数 -c, --bytes=[-]K 显示每个文件的后 K 字节内容. -f, --follow[={name|descriptor}] 持续监视指定的文件,当文件追加内容时,新的内容会立即显示在屏幕上. -n, --lines=[-]K 显示每个文件的后 K 行内容. --pid=PID 与 -f 选项配合使用,当 PID 进程结束后,终止 tail. -q, --quiet, --silent 从不显示包含给定文件名的文件

4.1 对每个命令行参数打印文件类型

file/filetype.c #include "apue.h" int main(int argc, char *argv[]) { int i; struct stat buf; char *ptr; for (i = 1; i < argc; i++) { printf("%s: ", argv[i]); if (lstat(argv[i], &buf) < 0) { err_ret("lstat error"); c

Linux 如何通过命令查看一个文件的某几行(中间几行或最后几行)

linux 如何显示一个文件的某几行(中间几行) [一]从第3000行开始,显示1000行.即显示3000~3999行 cat filename | tail -n +3000 | head -n 1000 [二]显示1000行到3000行 cat filename | head -n 3000 | tail -n +1000 *注意两种方法的顺序 分解: tail -n 1000:显示最后1000行 tail -n +1000:从1000行开始显示,显示1000行以后的 head -n 100

【译】 AWK教程指南 3计算并打印文件中指定的字段数据

awk 处理数据时,它会自动从数据文件中一次读取一条记录,并会将该记录切分成一个个的字段:程序中可使用 $1, $2,... 直接取得各个字段的内容.这个特色让使用者易于用 awk 编写 reformatter 来改变数据格式. 范例:以数据文件 emp.dat 为例,计算每人应发工资并打印报表. 分析:awk 会自行一次读入一条记录,故程序中仅需告诉 awk 如何处理所读入的数据行. 执行如下命令:($ 表UNIX命令行上的提示符)  $ awk '{ print $2, $3 * $4 }'

linux head显示相应文件的开头10行

head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾. 1.命令格式: head [参数]... [文件]... 2.命令功能: head 用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行. 3.命令参数: -q 隐藏文件名 -v 显示文件名 -c<字节> 显示字节数 -n<行数> 显示的行数 4.使用实例: 实例1:显示文件的前n行

linux 如何显示一个文件的某几行(中间几行)

linux中tail命令---用于查看文件内容 最基本的是cat.more和less. 1. 如果你只想看文件的前5行,可以使用head命令,如: head -5 /etc/passwd 2. 如果你想查看文件的后10行,可以使用tail命令,如: tail -10 /etc/passwd 或 tail -n 10 /etc/passwd tail -f /var/log/messages 参数-f使tail不停地去读最新的内容,这样有实时监视的效果 用Ctrl+c来终止! 3. 查看文件中间一

sort排序命令 uniq 去除排序过的文件中的重复行 cut提取命令 wc 统计命令

sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序. sort语法 [[email protected] ~]# sort [-fbMnrtuk] [file or stdin] 选项与参数: -f :忽略大小写的差异,例如 A 与 a 视为编码相同: -b :忽略最前面的空格符部分: -M :以月份的名字来排序,例如 JAN, DEC 等等的排序方法: -n :使用『纯数字

shell:删除/保留文件中的指定行

将文件file1中第一行到含有word字符的行删除,并重定向到文件file2: sed  '1,/word/d' file1 > file2 将文件file1中含有word字符的行保留,并重定向到文件file2,-n表示结果不打印到屏幕: sed -n '/word/p' file1 > file2 将文件file1中>=21行的内容删除,-i表示直接将更改保存在file1: sed -i '21,$d'  file1 多个条件用分号隔开: sed  '1,/word1/d;21,$d;