gpt4 book ai didi

java - 从两个文件中读取,然后将它们组合并写入第三个文件,java

转载 作者:行者123 更新时间:2023-12-01 15:26:44 25 4
gpt4 key购买 nike

我必须编写一个程序,从两个文件中读取数据,每个文件都有一个名称和 ID 列表,这些名称和 ID 都已根据姓氏按字母顺序排列。然后,假设该程序创建用户命名的第三个文件,其中包含两个程序中所有名称和 ID 的完整列表,并将它们按字母顺序排列。文件的格式是这样的--

姓、名
ID(例如rbb091020)
姓、名
身份证号

我的程序读取这两个文件,并创建第三个文件,但由于某种原因,它没有向第三个文件写入任何内容,并且该文件留空。我可以做什么来解决这个问题?

这是我的代码...

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

public class Combine_Files
{
public static void main(String[]args) throws IOException
{
String filename1 = "";
String filename2 = "";
String combinedFileName = "";
String response = "";
String nextName1 = "";
String nextName2 = "";
String nextIDNumber1 = "";
String nextIDNumber2 = "";
boolean okToOverwrite = false;
Scanner keyboard = new Scanner(System.in);

System.out.println("What is the name of the first file?");
filename1 = keyboard.nextLine();

File file1 = new File(filename1);

if (!file1.exists())
{
System.out.println(file1 + " does not exist.\nTerminating Program.");
System.exit(0);
}

System.out.println("What is the name of the second file?");
filename2 = keyboard.nextLine();

File file2 = new File (filename2);
if (!file2.exists())
{
System.out.println(file2 + " does not exist.\nTerminating Program.");
System.exit(0);
}

System.out.println("What is the name of the file that you wish to create?");
combinedFileName = keyboard.nextLine();
File combinedFile = new File (combinedFileName);

while (combinedFile.exists() && !okToOverwrite)
{
System.out.println("\nError, a file named " +
combinedFileName + " already exists." +
"\nWould you like to overwrite this file?" +
"\nEnter Y for Yes or N for No.");
response = keyboard.nextLine();

// Add input validation on response

if (response.equalsIgnoreCase("Y"))
{
okToOverwrite = true;
}
else
{
System.out.println("Enter a new filename.");
combinedFileName = keyboard.nextLine();
combinedFile = new File(combinedFileName);
}
}

if (file1.exists() && file2.exists())
{

Scanner list1 = new Scanner(file1);
Scanner list2 = new Scanner(file2);
PrintWriter outputFile = new PrintWriter(combinedFile);

while (list1.hasNext() && list2.hasNext())
{
nextName1 = list1.nextLine();
nextName2 = list2.nextLine();

if(nextName1.compareToIgnoreCase(nextName2) <0)
{
outputFile.print(nextName1);
nextName1 = list1.nextLine();
outputFile.print(nextName1);
}
else if(nextName1.compareToIgnoreCase(nextName2) >0)
{
outputFile.println(nextName2);
nextName2 = list2.nextLine();
outputFile.println(nextName2);
}
else
{
outputFile.println(nextName1);
nextName1 = list1.nextLine();
outputFile.println(nextName1);
outputFile.println(nextName2);
nextName2 = list2.nextLine();
outputFile.println(nextName2);
}
}

while (list1.hasNext() && !list2.hasNext())
{
outputFile.println(nextName1);
}

while (list2.hasNext() && !list1.hasNext())
{
outputFile.println(nextName2);
}
outputFile.close();
}
}
}

最佳答案

我发现两个错误:主要的一个是底部的循环(在另一个输入文件耗尽后在一个输入文件中输出行)不会推进它们正在读取的文件。因此,如果它们执行的话,它们就会无限循环。

第二个错误是在第一次名称比较后使用“print()”而不是“println()”;这会输出没有行尾的行,并且可能不是您想要的。

之后我得到了输出,尽管我没有检查它是否有其他错误。

如果我可以建议:如果您使用更多一些执行常见功能的方法,您可以使您的程序更简单。例如:一种方法可以将已读取的输入、一个输入扫描器和输出文件作为参数并写出当前名称。类似的东西

private void writeName(String currentLine, Scanner inFile, File outFile)
{
outFile.println(currentLine);
String nextLine = inFile.nextLine();
outFile.println(nextLine);
}

发现这些问题的方法是注意您何时似乎多次执行相同的编码步骤。在这种情况下,您将分别对两个输入文件执行上述步骤,因此您可以使用此方法(以及其他类似方法)消除代码的“复制和粘贴”性质。

关于java - 从两个文件中读取,然后将它们组合并写入第三个文件,java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10057435/

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