无法从其他方法读取文件

问题描述 投票:0回答:1

我是java初学者,正在尝试解决以下用例。 用例:从包含数字的文件(input.txt)中,找出所有唯一数字并将其写入不同的文件(output.txt),而不使用任何数据结构(数组、集合、映射等)。 对于提到的用例,我用 java 编写了以下代码:

import java.util.*;
import java.io.*;

class Merge{
    public static boolean doesExist(String mobileNo) throws IOException{
        BufferedReader reader = new BufferedReader(new FileReader("output.txt"));
        String exist = reader.readLine();
        
        //logging
        System.out.println(exist + " " + mobileNo);
        
        while(exist != null){
            if(exist.equals(mobileNo)) return true;
            exist = reader.readLine();
        }
        return false;
    }
    
    public static void main(String[] args) throws IOException{
        
        PrintWriter writer = new PrintWriter("output.txt");
        BufferedReader reader = new BufferedReader(new FileReader("input.txt"));
        
        
        String mobileNo = reader.readLine();
        
        while(mobileNo != null){
            if(!doesExist(mobileNo)) writer.println(mobileNo);
            mobileNo = reader.readLine();
        }
        
        writer.flush();
        reader.close();
        writer.close();
        
        return ;
    }
}

上面的程序没有过滤唯一数字,输出图片附后。 output.txt

我尝试使用控制台打印进行调试,发现无法读取output.txt。 以下是logging的控制台输出:

console_logging

输入如下:

input.txt

请有人帮我解释为什么会发生这种情况。

java file input output java-io
1个回答
0
投票

错误在于,每次我决定写入数字时,我都没有将数据从流刷新到文件中。因此,每次数据在流中并且没有写入文件时,缓冲读取器每次都会读取 null。我必须补充一下:

if(!doesExist(mobileNo)){
   writer.println(mobileNo);
   writer.flush()
}
© www.soinside.com 2019 - 2024. All rights reserved.