gpt4 book ai didi

java - 从文件中读取并写入java中的文件

转载 作者:行者123 更新时间:2023-12-01 02:17:30 24 4
gpt4 key购买 nike

我是 Java 初学者。

这是我的方法:

我正在尝试读取两个文件,然后获取它们的并集。我应该使用一个大小为 100 的数组。(只允许一个 array,不允许逐行读写或 arrayList 或其他结构。)

首先,我从 file1 中读取所有记录,并将它们写入输出,即第三个文件。为此,我一次读取 100 条记录,并使用迭代将它们写入第三个文件。

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

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

编辑:好的,现在它没有给出任何异常,但是它找不到不同的记录并且无法写入它们。我猜最后一个 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;
}
}

最佳答案

编辑!重做。

好的,所以要一次使用 100 行,您需要检查是否为 null,否则尝试将 null 写入文件可能会导致错误。

您正在检查文件是否在末尾一次,然后在不检查是否为空的情况下收集了另外 99 条信息。

如果调用这一行会怎样:

while((line2 = reader2.readLine()) != null)

文件中只剩下 1 行?然后你的内存数组包含 99 个 null 实例,你尝试将 null 写入文件 99 次。这是更糟糕的情况。

我真的不知道我们应该为寻求家庭作业帮助的人提供多少帮助,在我熟悉的大多数网站上什至不允许这样做。

这是编写第一个文件的一种方法的示例。

String line1 = reader1.readLine();

boolean end_of_file1 = false;
while(!end_of_file)
{
for (int i = 0; i < memorySize)
{
memory[i] = line1;
i++;

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

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

reader1.close();

一旦你有了它,为了更容易检查副本,创建一个公共(public)静态 boolean 值来检查文件,然后你可以调用它,这将使代码更清晰。

public static boolean isUsed(String f1, String item, int dist)
{
BufferedReader buff1 = new BufferedReader(new FileReader(f1));

for(int i = 0;i<dist;i++)
{
String line = buff1.readLine()
if(line == null){
return false;
}
if(line.equals(item))
{
return true;
}
}
return false;
}

然后使用与写入文件1相同的方法,只是在写入每一行之前检查是否有!isUsed()

boolean end_of_file2 = false;
memory = new String[memorySize];// Reset the memory, erase old data from file1
int numberOfLinesFile2=0;
String line2 = reader2.readLine();
while(!end_of_file2)
{
for (int i = 0; i < memorySize; )
{
memory[i] = line2;
i++;

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

for (int i = 0; i < memorySize; i++)
{
if(!memory[i] == null)
{
//Check is current item was used in file 1.
if(!isUsed(file1, memory[i], numberOfLinesFile1)){//If not used already
writer.write(memory[i]);
writer.newLine();
numberOfLinesFile2++;
}
}
}
}
reader2.close();
writer.close();

希望这对您有所帮助。请注意,我没有提供完整的代码,因为我了解到仅粘贴代码会使复制和粘贴更有可能只使用代码而不理解它。我希望你觉得它有用。

关于java - 从文件中读取并写入java中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7942365/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com