原 java中关于判断文本文件读到文件尾

本文介绍了使用Java的Scanner和BufferedReader类进行文件读取的方法,包括如何判断文件是否读完,以及针对不同数据类型的读取策略。

转载自https://blog.youkuaiyun.com/kejizuiqianfang/article/details/55253698


Scanner类中有不少可以查看文件是否结束的方法,比如下面的代码使用的是hasNextLine方法

package com.li;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.*;

public class Main {

    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        Scanner inputStream = null;
        try 
        {
            inputStream = new Scanner(new FileInputStream("stuff.txt"));
        }catch(FileNotFoundException e)
        {
            System.out.println("File stuff.txt was no found");
            System.exit(0);
        }
        String line = null;
        while(inputStream.hasNextLine())
        {
            line = inputStream.nextLine();
            System.out.println(line);
        }
        inputStream.close();
    }
}

使用hasNextLine方法在读到结尾的时候会返回一个false值,从而可以判读文件读完了(注意有一个NextLine方法在读到\n会自动将其抛弃),针对不同的数据类型,Scanner还为我们提供了hasNextInt,jasNextLong,hasNextShort……等等一些方法,它们的使用方法都是大同小异的。

 

使用BufferedReader类来判断

使用BufferedReader类中的read和readLine方法来判断即可,对于read方法,当返回-1的时候就可以知道读完了,对于readLine方法,当返回null的时候就知道读完了。
 

### Java 判断两个文件是否相同 为了比较两个文件的内容并确认它们是否完全一致,在Java中有多种方法可以实现这一功能。一种常见的方式是读取这两个文件的数据到字节数组中,再逐一对比这些数组中的每一个元素。 下面是一个简单的例子来展示这种方法: ```java import java.io.File; import java.io.FileInputStream; import java.io.IOException; public class FileComparator { public static boolean areFilesIdentical(File file1, File file2) throws IOException { try (FileInputStream fis1 = new FileInputStream(file1); FileInputStream fis2 = new FileInputStream(file2)) { int byteFromFile1; int byteFromFile2; while (true) { byteFromFile1 = fis1.read(); byteFromFile2 = fis2.read(); if (byteFromFile1 != byteFromFile2) { return false; // 文件不同则返回false } else if (byteFromFile1 == -1 || byteFromFile2 == -1) { break; // 当任意一个文件结束时跳出循环 } } // 如果两个文件都已到达结尾,则认为文件相等;否则不相等 return !(fis1.available() > 0 || fis2.available() > 0); } } } ``` 此代码片段展示了如何打开两个`FileInputStream`对象用于访问待比较的文件,并通过调用`read()`函数逐一获取来自每个输入流的一个字节直到遇到EOF(-1),期间如果发现有任何差异即刻停止操作并报告结果。最后还需验证两者的剩余长度是否均为零以确保确实全部匹配[^1]。 对于大尺寸文件而言,上述方式可能会消耗较多内存资源。因此也可以考虑采用更高效的算法比如计算哈希值来进行快速对比,这通常只需要遍历一次文件即可完成整个过程而不需要额外存储大量数据副本于RAM之中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值