在Java编程中,读取本地文件并获取指定行数是一个常见的任务,特别是在处理日志文件或文本数据时。在这个场景下,文件"Test.java"中的代码提供了一个示例,用于演示如何实现这一功能。文件位于"C:\testlog.txt",其内容包含了多个时间戳和错误消息(如"VirtualDisk-couldn'tloadBBArchive.dll-126")。 首先,代码导入了几个关键的Java IO库,如`BufferedReader`、`FileInputStream`、`FileNotFoundException`和`IOException`。这些类是进行文件操作必不可少的部分,`BufferedReader`用于逐行读取文件,而`FileNotFoundException`则用于处理文件不存在的情况。 以下是对代码部分的详细解释: ```java // 导入所需的库 import java.io.*; // 定义一个BufferedReader对象,用于读取文件 BufferedReader br = null; try { // 创建FileInputStream对象,传入文件路径 FileInputStream fis = new FileInputStream(new File("C:\\testlog.txt")); // 将FileInputStream包装为BufferedReader,以便逐行读取 br = new BufferedReader(new InputStreamReader(fis)); // 定义一个计数器和目标行数 int targetLine = 5; // 指定要读取的行数,这里是前五行 // 使用循环逐行读取文件,直到达到目标行数或者文件结束 for (int i = 0; i < targetLine && (br.readLine() != null); i++) { String line = br.readLine(); // 读取一行 System.out.println(line); // 打印每一行内容 } } catch (FileNotFoundException e) { System.err.println("文件未找到: " + e.getMessage()); } catch (IOException e) { System.err.println("读取文件时发生错误: " + e.getMessage()); } finally { // 关闭资源,释放内存 try { if (br != null) { br.close(); } } catch (IOException e) { System.err.println("关闭文件流时出错: " + e.getMessage()); } } ``` 这段代码的核心逻辑是创建一个`BufferedReader`实例,并使用`readLine()`方法逐行读取文件,直到达到预设的行数(这里为5行)。如果文件不存在或在读取过程中出现异常,代码会捕获相应的异常并打印错误信息。最后,确保在完成操作后关闭`BufferedReader`以释放系统资源。 通过这个示例,你可以了解如何使用Java的基本IO操作来读取本地文件,并且只获取特定数量的行。这在实际开发中对于处理大型文件和优化性能至关重要,因为逐行读取可以避免一次性加载整个文件到内存中,减少内存消耗。
测试txt路径:C:/testlog.txt,内容如下:
23:25:37 VirtualDisk - couldn't load BBArchive.dll - 126
23:29:37 VirtualDisk - couldn't load BBArchive.dll - 126
22:29:12 VirtualDisk - couldn't load BBArchive.dll - 126
22:35:17 VirtualDisk - couldn't load BBArchive.dll - 126
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
lllllllllllllllllllllllllllllllllllllllll
iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
测试代码:
/* * $RCSfile: Test.java,v $ * $Revision: 1.1 $ * $Date: 2009-2-20 $ * * Copyright (C) 2005 Bettem, Inc. All rights reserved. * * This software is the proprietary information of Bettem, Inc. * Use is subject to license terms. */ package servlet; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.List; /** * p * Title: Test * /p * p * Description: * /p * p * Copyright: Copyright (c) 2006 * /p * * @author 李晗 * @version 1.0 */ public class Test { /** * @param args */ /** * 读取txt内容到数组 */ public static String[] getTxtContent(String path) { File f = null; String[] a = null; try { a = new String[100000]; f=new File(path); InputStreamReader read = new InputStreamReader(new FileInputStream(f), GBK ); BufferedReader reader = new BufferedReader(read); String line; int i; for (i = 0; i 100000; i++) { if ((line = reader.readLine()) != null) { a[i] = line; } } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return a; } /** * 读取指定一行内容 * @param path * @param row * @return */ public String listTxtByRow1(String path,Integer row) { String[] s = getTxtContent(path); return 第 +row+ 行: +s[row-1]; } public List String listTxtByRow2(String path,Integer start,Integer end) { List String list =new ArrayList String (); String[] s = getTxtContent(path); for(int i = start;i = end;i++) { list.add(s[i-1]); } return list; } public static void main(String[] args) { Test t = new Test(); System.out.println(t.listTxtByRow1( C:/testlog.txt ,6));//取出第6行数据 System.out.println( ==================取出指定行数===================== ); List String list = t.listTxtByRow2( C:/testlog.txt , 2, 5);//取出2-5行数据 for(int i = 0;i list.size();i++) { System.out.println(list.get(i)); } } }
运行情况:
第6行:wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
==================取出指定行数=====================
23:29:37 VirtualDisk - couldn't load BBArchive.dll - 126
22:29:12 VirtualDisk - couldn't load BBArchive.dll - 126
22:35:17 VirtualDisk - couldn't load BBArchive.dll - 126
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
下载后可阅读完整内容,剩余1页未读,立即下载
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C++标准程序库:权威指南
- Java解惑:奇数判断误区与改进方法
- C++编程必读:20种设计模式详解与实战
- LM3S8962微控制器数据手册
- 51单片机C语言实战教程:从入门到精通
- Spring3.0权威指南:JavaEE6实战
- Win32多线程程序设计详解
- Lucene2.9.1开发全攻略:从环境配置到索引创建
- 内存虚拟硬盘技术:提升电脑速度的秘密武器
- Java操作数据库:保存与显示图片到数据库及页面
- ISO14001:2004环境管理体系要求详解
- ShopExV4.8二次开发详解
- 企业形象与产品推广一站式网站建设技术方案揭秘
- Shopex二次开发:触发器与控制器重定向技术详解
- FPGA开发实战指南:创新设计与进阶技巧
- ShopExV4.8二次开发入门:解决升级问题与功能扩展