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作为返回值标志文件字节流的结束。