【发布时间】:2011-12-18 01:07:49
【问题描述】:
我是 Java 初学者。
这是我的方法:
我正在尝试读取两个文件,然后将它们合并。我应该使用大小为 100 的数组。(只允许一个 array,逐行读写或 arrayList 或其他结构。)
首先,我从file1 读取所有记录,并将它们写入输出,即第三个文件。为此,我一次读取 100 条记录,并使用迭代将它们写入第三个文件。
之后,和第一个文件一样,这次我一次读取第二个文件 100 条记录,并将它们写入memory[]。然后我找到公共记录,如果我从 File2 读取的记录不在 File1 中,我将其写入输出文件。我这样做直到reader2.readLine() 得到null 并在每次迭代中重新打开file1。
这是我到目前为止所做的,几乎完成了。任何帮助将不胜感激。
编辑:好的,现在它没有给出任何异常,但是它找不到不同的记录并且无法写入它们。我猜最后一个 for 循环和布尔值不起作用,为什么?我真的需要帮助。感谢您的耐心等待。
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;
}
}
【问题讨论】:
-
如果
stdlist1.txt的长度少于 100 行,你的代码会发生什么?如果它不是 100 行的倍数,会发生什么?你能用ArrayList<String>代替String[]来代替memory吗?这比使用固定大小的数组要容易得多。 -
这是我的家庭作业项目,它确保没有少于 100 行的输入文件。而且,如果它不是 100 行的倍数,则 memory[] 将填充一些空值。但我认为这不会是一个问题。