Java 两个文件与数组的并集

Java 两个文件与数组的并集,java,arrays,file-io,boolean,Java,Arrays,File Io,Boolean,我是Java初学者 我试图读取两个文件,然后得到它们的并集。我应该使用大小为100的数组。(只允许一个数组) 首先,我从file1读取所有记录,并将它们写入输出file3。为此,我一次读取100条记录,并使用迭代将它们写入file3 之后,像file1,这次我一次读取第二个文件作为100条记录,并将它们写入数组memory[]。然后我找到公共记录,如果从file2读取的记录不在file1中,我将其写入输出文件。我一直这样做,直到reader2.readLine()获取null并且在每次迭代中重新

我是Java初学者

我试图读取两个文件,然后得到它们的并集。我应该使用大小为100的数组。(只允许一个数组)

首先,我从
file1
读取所有记录,并将它们写入输出
file3
。为此,我一次读取100条记录,并使用迭代将它们写入
file3

之后,像
file1
,这次我一次读取第二个文件作为100条记录,并将它们写入数组
memory[]
。然后我找到公共记录,如果从
file2
读取的记录不在
file1
中,我将其写入输出文件。我一直这样做,直到
reader2.readLine()
获取
null
并且在每次迭代中重新打开
file1

这是我到目前为止所做的,几乎完成了,但它给出了
NullPointerException
。任何帮助都将不胜感激

编辑:好的,现在它没有给出任何异常,但是它没有找到不同的记录,也不能写入它们。我猜最后的for循环和boolean不起作用,为什么?请帮忙

import java.io.*;

public class FileUnion
{
private static long startTime, endTime;

public static void main(String[] args) throws IOException 
{
    System.out.println("PROCESSING...");
    reset();
    startTimer();

    String[] memory = new String[100];
    int memorySize = memory.length;

    File file1 = new File("stdlist1.txt");
    BufferedReader reader1 = new BufferedReader(new FileReader(file1));

    File file3 = new File("union.txt");
    BufferedWriter writer = new BufferedWriter(new FileWriter(file3));

    int numberOfLinesFile1 = 0;
    String line1 = null;
    String line11 = null;


    while((line1 = reader1.readLine()) != null)
    {
        for (int i = 0; i < memorySize; )
        {
            memory[i] = line1;
            i++;

            if(i < memorySize)
            {
                line1 = reader1.readLine();
            }
        }

        for (int i = 0; i < memorySize; i++)
        {
            writer.write(memory[i]);
            writer.newLine();
            numberOfLinesFile1++;
        }
    }

    reader1.close();

    File file2 = new File("stdlist2.txt");
    BufferedReader reader2 = new BufferedReader(new FileReader(file2));

    String line2 = null;
    while((line2 = reader2.readLine()) != null)
    {
        for (int i = 0; i < memorySize; )
        {
            memory[i] = line2;
            i++;

            if(i < memorySize)
            {
                line2 = reader2.readLine();
            }
        }

        for (int k = 0; k < memorySize; k++ )
        {
            boolean found = false;
            File f1 = new File("stdlist1.txt");
            BufferedReader buff1 = new BufferedReader(new FileReader(f1));

            for (int m = 0; m < numberOfLinesFile1; m++)
            {
                line11 = buff1.readLine();

                if (line11.equals(memory[k]) && found == false);
                {
                    found = true;
                }

            }
            buff1.close();

            if (found == false)
            {
                writer.write(memory[k]);
                writer.newLine();
            }


        }       
    }

    reader2.close();
    writer.close();

    endTimer();
    long time = duration();
    System.out.println("PROCESS COMPLETED SUCCESSFULLY");
    System.out.println("Duration: " + time + " ms");

}

public static void startTimer()
{
    startTime = System.currentTimeMillis();
}
public static void endTimer()
{
    endTime = System.currentTimeMillis();
}
public static long duration()
{
    return endTime - startTime;
}
public static void reset()
{
    startTime = 0;
    endTime = 0;
}
}
import java.io.*;
公共类文件联合
{
私有静态长起始时间、结束时间;
公共静态void main(字符串[]args)引发IOException
{
System.out.println(“处理…”);
重置();
startTimer();
字符串[]内存=新字符串[100];
int memorySize=memory.length;
File file1=新文件(“stdlist1.txt”);
BufferedReader reader1=新BufferedReader(新文件读取器(文件1));
File file3=新文件(“union.txt”);
BufferedWriter writer=new BufferedWriter(new FileWriter(file3));
int numberoflines文件1=0;
字符串line1=null;
字符串line11=null;
而((line1=reader1.readLine())!=null)
{
for(int i=0;i
您必须检查是否尚未到达文件末尾。在所有具有
lineX=readerX.readLine()
的循环中,立即检查
lineX==null
是否为空,如果为空,则中断循环

编辑我自己的答案,因为代码在注释中显示不好

while(!line11.equals(memory[k]))
    {
        line11 = buff1.readLine();
    }

这里的
line11
有时为空。如果
内存[k]
不在文件1中,会发生什么?

内存[k]为空。为什么这是空的?因为在这段代码中:

while((line2 = reader2.readLine()) != null)
        {
            for (int i = 0; i < 100; i++)
            {
                memory[i] = line1;
                i++;

                if(i < 100)
                {
                    line2 = reader2.readLine();
                }
            }
while((line2=reader2.readLine())!=null)
{
对于(int i=0;i<100;i++)
{
存储器[i]=line1;
i++;
如果(i<100)
{
line2=reader2.readLine();
}
}
你说
memory[i]=line1;

但是,line1始终为null,因为您以前在循环中使用过它,该循环在line1为null时结束


我相信您打算在上面的代码中编写
**memory[I]=line2;**

是的。您是对的。我是有意的。我更改了它,但仍然在同一行给出nullpointerexception.:(如果memory[k]不在文件1中,它只会一直读取,直到它们相同或不相同。如果循环检查文件1中的所有记录但未找到,则将其写入输出。对吗?我的方法是否正确?或者只是代码问题?请帮助。如果不在f1中,则while循环的条件永远不会为false,因此它会一直读取,直到?