java读取文件末尾

简介: java读取文件末尾

Java 中 BufferedReader 里 readLine()方法每次只能读一行 能不能一次读到文件结尾??
不可以直接读到文件末尾。

readLine顾名思义,每次读取一行,一般用于文件解析。

可以自己封装一个APP读取到文件末尾的函数。比如:

StringBuffer content= new StringBuffer();

BufferedReader reader = new BufferedReader(in);

int ch;

while ((ch = reader.read()) != -1) {

content.append((char) ch);

}

reader.close();

return content.toString();

求java代码:获取文件内容的最后一行
public static String readLastLine(File file) throws IOException {

if (!file.exists() || file.isDirectory() || !file.canRead()) {

return null;  

}

RandomAccessFile raf = null;

try {

raf = new RandomAccessFile(file, "r");  

long len = raf.length();  

if (len == 0L) {  

  return "";  

} else {  

  long pos = len - 1;  

  while (pos  0) {  

    pos--;  

    raf.seek(pos);  

    if (raf.readByte() == '\n') {  

      break;  

    }  

  }  

  if (pos == 0) {  

    raf.seek(0);  

  }  

  byte[] bytes = new byte[(int) (len - pos)];  

  raf.read(bytes);  

    return new String(bytes);  

}  

} catch (FileNotFoundException e) {

 e.printStackTrace();

} finally {

if (raf != null) {  

  try {  

    raf.close();  

  } catch (Exception ea) { 

      ea.printStackTrace(); 

  }  

}  

}

return null;

java读取文件末尾

java从文件结尾读取数据
可以参照下面的两个例子

**

  • 随机读取文件内容
  • @param fileName 文件名

*/

public static void readFileByRandomAccess(String fileName){

RandomAccessFile randomFile = null;

try {

System.out.println("随机读取一段文件内容:");

// 打开一个随机访问文件流,按只读方式

randomFile = new RandomAccessFile(fileName, "r");

// 文件长度,字节数

long fileLength = randomFile.length();

// 读文件的起始位置

int beginIndex = (fileLength 4) ? 4 : 0;

//将读文件的开始位置移到beginIndex位置。

randomFile.seek(beginIndex);

byte[] bytes = new byte[10];

int byteread = 0;

//一次读10个字节,如果文件内容不足10个字节,则读剩下的字节。

//将一次读取的字节数赋给byteread

while ((byteread = randomFile.read(bytes)) != -1){

System.out.write(bytes, 0, byteread);

}

} catch (IOException e){

e.printStackTrace();

} finally {

if (randomFile != null){

try {

randomFile.close();

} catch (IOException e1) {

}

}

}

}

/**

  • 显示输入流中还剩的字节数
  • @param in

*/

private static void showAvailableBytes(InputStream in){

try {

System.out.println("当前字节输入流中的字节数为:" + in.available());

} catch (IOException e) {

e.printStackTrace();

}

}

public static void main(String[] args) {

String fileName = "C:/temp/newTemp.txt";

ReadFromFile.readFileByBytes(fileName);

ReadFromFile.readFileByChars(fileName);

ReadFromFile.readFileByLines(fileName);

ReadFromFile.readFileByRandomAccess(fileName);

}

}

java 数据流的readInt()怎么判断是否读到了文件尾
一般RAF和字节流用int read()读取文件,一次只能读取一个int值的低八位,当读到文件末尾时可以用-1表示,int readInt(),一次读取4个字节,用-1已经不能表示文件末尾了,因为用4个字节可以表示-1,所以用readInt读到文件末尾时,会直接抛异常,即EOFException(end of file),文件到达末尾异常

java怎么直接读取txt的最后一行?
public class Test {

public static void main(String[] ages) throws IOException {

File file = new File("test.txt");

String readLastLine = readLastLine(file, "UTF-8");

System.out.println(readLastLine);

}

public static String readLastLine(File file, String charset) throws IOException {

if (!file.exists() || file.isDirectory() || !file.canRead()) {

return null;  

}

RandomAccessFile raf = null;

try {

raf = new RandomAccessFile(file, "r");  

long len = raf.length();  

if (len == 0L) {  

  return "";  

} else {  

  long pos = len - 1;  

  while (pos  0) {  

    pos--;  

    raf.seek(pos);  

    if (raf.readByte() == '\n') {  

      break;  

    }  

  }  

  if (pos == 0) {  

    raf.seek(0);  

  }  

  byte[] bytes = new byte[(int) (len - pos)];  

  raf.read(bytes);  

  if (charset == null) {  

    return new String(bytes);  

  } else {  

    return new String(bytes, charset);  

  }  

}  

} catch (FileNotFoundException e) {

} finally {

if (raf != null) {  

  try {  

    raf.close();  

  } catch (Exception e2) {  

  }  

}  

}

return null;

}

}

使用RandomAccessFile直接将指针移到文件最后一个字符开始读取,从后往前读取,当遇到第一换行符时结束

为什么用-1判断读取到文件尾 java输入流
一,java中在处理short,byte类型时都是按照int存储和计算的,运算后再进行强制类型转换。

二,由于java读取的一字节按照int型是没有负数的,故可以用-1作为返回值标志文件字节流的结束。

相关文章
|
21天前
|
Java
Java“解析时到达文件末尾”解决
在Java编程中,“解析时到达文件末尾”通常指在读取或处理文件时提前遇到了文件结尾,导致程序无法继续读取所需数据。解决方法包括:确保文件路径正确,检查文件是否完整,使用正确的文件读取模式(如文本或二进制),以及确保读取位置正确。合理设置缓冲区大小和循环条件也能避免此类问题。
|
3天前
|
Java 数据格式 索引
使用 Java 字节码工具检查类文件完整性的原理是什么
Java字节码工具通过解析和分析类文件的字节码,检查其结构和内容是否符合Java虚拟机规范,确保类文件的完整性和合法性,防止恶意代码或损坏的类文件影响程序运行。
|
3天前
|
Java API Maven
如何使用 Java 字节码工具检查类文件的完整性
本文介绍如何利用Java字节码工具来检测类文件的完整性和有效性,确保类文件未被篡改或损坏,适用于开发和维护阶段的代码质量控制。
|
19小时前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
13 4
|
13天前
|
Java
Java开发如何实现文件的移动,但是在移动结束后才进行读取?
【10月更文挑战第13天】Java开发如何实现文件的移动,但是在移动结束后才进行读取?
36 2
|
13天前
|
Java Apache Maven
Java将word文档转换成pdf文件的方法?
【10月更文挑战第13天】Java将word文档转换成pdf文件的方法?
34 1
|
13天前
|
监控 Java
Java定时扫码一个文件夹下的文件,如何保证文件写入完成后才进行处理?
【10月更文挑战第13天】Java定时扫码一个文件夹下的文件,如何保证文件写入完成后才进行处理?
47 1
|
17天前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
27 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
|
22天前
|
消息中间件 Java 大数据
大数据-56 Kafka SpringBoot与Kafka 基础简单配置和使用 Java代码 POM文件
大数据-56 Kafka SpringBoot与Kafka 基础简单配置和使用 Java代码 POM文件
55 2
|
5天前
|
缓存 Java 程序员
Java|SpringBoot 项目开发时,让 FreeMarker 文件编辑后自动更新
在开发过程中,FreeMarker 文件编辑后,每次都需要重启应用才能看到效果,效率非常低下。通过一些配置后,可以让它们免重启自动更新。
12 0