Java 文件比较器没有';无法将结果写入文件

Java 文件比较器没有';无法将结果写入文件,java,Java,嗨,伙计们, 我正在编写一个简单的应用程序,它应该打开两个.txt文件,获取第一个文件的第一行,然后遍历第二个文件的每一行。如果它在第二个文件中找到相同的字符串,那么它应该使用nextline将该字符串写入outputfile.txt。在第二个文件上的循环完成后,它应该从第一行中选取第二行并搜索相同的字符串,如果找到,则使用nextline写入。 我自己也尝试过,但它没有任何作用,我的意思是它不会将任何文本放入outputfile.txt,即使我确信有相同的单词 package com.comp

嗨,伙计们, 我正在编写一个简单的应用程序,它应该打开两个.txt文件,获取第一个文件的第一行,然后遍历第二个文件的每一行。如果它在第二个文件中找到相同的字符串,那么它应该使用nextline将该字符串写入outputfile.txt。在第二个文件上的循环完成后,它应该从第一行中选取第二行并搜索相同的字符串,如果找到,则使用nextline写入。 我自己也尝试过,但它没有任何作用,我的意思是它不会将任何文本放入outputfile.txt,即使我确信有相同的单词

package com.company;

import java.io.*;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Scanner;

public class Main {

public static void main(String[] args) throws IOException {

    String sourceFileName = "C:\\Users\\Maciej\\IdeaProjects\\spring5webapp\\FileTextChecker\\src\\com\\company\\BootfileRO.txt";
    String comparingFileName = "C:\\Users\\Maciej\\IdeaProjects\\spring5webapp\\FileTextChecker\\src\\com\\company\\BootfileSK.txt";
    String outputFileName = "C:\\Users\\Maciej\\IdeaProjects\\spring5webapp\\FileTextChecker\\src\\com\\company\\output.txt";

    System.out.println("Starting ...  ");



    File file1 = new File(sourceFileName);
    File file2 = new File(comparingFileName);
    PrintWriter file3 = new PrintWriter(outputFileName);

    String line1 = "";
    String line2 = "";

    Scanner scan1 = new Scanner(file1);
    Scanner scan2 = new Scanner(file2);
    while(scan1.hasNextLine()){
        line1 = scan1.nextLine();
        while(scan2.hasNextLine()){
            line2 = scan2.nextLine();
            if(line1.equals(line2)){
                file3.println(line1);
            }
            else{
                continue;
            }
        }


    }
    file3.close();





   // Comparer comparer = new Comparer(sourceFileName, comparingFileName, oFN);
   // comparer.compare();


   // CompareByScanner compareBYScanner = new CompareByScanner(sourceFileName, comparingFileName, outputFileName);
   // compareBYScanner.compare();


    }


}

老实说,“equals”函数似乎找不到相同的字符串,但我确信它们确实存在。

这里的问题是scan2从不重置,因此在比较文件1的第一行之后,scan2.hasNextLine()将返回false,因此不会比较任何其他行。相反,在scan1循环的每次迭代中,将scan2设置为等于一个新扫描仪。这会将其设置为文件的开头。然后,扫描文件后,关闭扫描仪。新代码:

package test;

import java.io.*;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Scanner;

public class TestMain {

public static void main(String[] args) throws IOException {

String sourceFileName = "src/output/compare1.txt";
String comparingFileName = "src/output/compare2.txt";
String outputFileName = "src/output/output.txt";

System.out.println("Starting ...  ");



File file1 = new File(sourceFileName);
File file2 = new File(comparingFileName);
PrintWriter file3 = new PrintWriter(outputFileName);

String line1 = "";
String line2 = "";

Scanner scan1 = new Scanner(file1);
Scanner scan2;
while(scan1.hasNextLine()){
    line1 = scan1.nextLine();
    scan2 = new Scanner(file2);
    while(scan2.hasNextLine()){
        line2 = scan2.nextLine();
        System.out.println("Line 1: " + line1 + "\n" + "Line 2: " + line2);
        if(line1.equals(line2)){
            file3.println(line1);
        }
    }
    scan2.close();
}
file3.close();





// Comparer comparer = new Comparer(sourceFileName, comparingFileName, oFN);
// comparer.compare();


// CompareByScanner compareBYScanner = new CompareByScanner(sourceFileName, 
comparingFileName, outputFileName);
// compareBYScanner.compare();


}


}

这里的问题是scan2从不重置,因此在比较文件1的第一行之后,scan2.hasNextLine()将返回false,因此不会比较任何其他行。相反,在scan1循环的每次迭代中,将scan2设置为等于一个新扫描仪。这会将其设置为文件的开头。然后,扫描文件后,关闭扫描仪。新代码:

package test;

import java.io.*;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Scanner;

public class TestMain {

public static void main(String[] args) throws IOException {

String sourceFileName = "src/output/compare1.txt";
String comparingFileName = "src/output/compare2.txt";
String outputFileName = "src/output/output.txt";

System.out.println("Starting ...  ");



File file1 = new File(sourceFileName);
File file2 = new File(comparingFileName);
PrintWriter file3 = new PrintWriter(outputFileName);

String line1 = "";
String line2 = "";

Scanner scan1 = new Scanner(file1);
Scanner scan2;
while(scan1.hasNextLine()){
    line1 = scan1.nextLine();
    scan2 = new Scanner(file2);
    while(scan2.hasNextLine()){
        line2 = scan2.nextLine();
        System.out.println("Line 1: " + line1 + "\n" + "Line 2: " + line2);
        if(line1.equals(line2)){
            file3.println(line1);
        }
    }
    scan2.close();
}
file3.close();





// Comparer comparer = new Comparer(sourceFileName, comparingFileName, oFN);
// comparer.compare();


// CompareByScanner compareBYScanner = new CompareByScanner(sourceFileName, 
comparingFileName, outputFileName);
// compareBYScanner.compare();


}


}

提示:A)从已知的小文件开始B)添加跟踪打印,以显示代码的具体操作。与此无关:您只关闭了三个文件对象中的一个。因此,我添加了两个测试文件:A:aaa bbb ccc B:bbb zxc qfd它将bbb打印到输出,但我不知道为什么它会停止。提示:A)从已知的小文件开始B)添加跟踪打印,以显示代码的具体操作。与此无关:您只关闭了三个文件对象中的一个。因此,我添加了两个测试文件:A:aaa bbb ccc B:bbb zxc qfd它将bbb打印到输出,但我不知道为什么它会停止。谢谢!我在一个文件中发现了一个错误,并自己找到了解决方案。。。不过我真的很感谢你的帮助!非常感谢。我在一个文件中发现了一个错误,并自己找到了解决方案。。。不过我真的很感谢你的帮助!